次のように定義されたテーブルがあるとします:
myTable = { myValue = nil, myOtherValue = nil}
このようなfor eachファッションループでどのように繰り返しますか?
for key,value in myTable do --pseudocode
value = "foobar"
end
また、それが助けになれば、私は本当にキーを気にせず、価値だけを気にします。
値を持たない(つまり、nil
である)キーは存在しません。 myTable
は、Luaに関する限り、空テーブルです。
空のテーブルを反復処理できますが、それは役に立たないでしょう。
さらに:
for key,value in myTable do --pseudocode
value = "foobar"
end
この「擬似コード」は意味がありません。ローカル変数の内容を変更してテーブルを変更することはできません。 Luaはそのようには機能しません。テーブルエントリへの参照を取得することはできません。テーブルからvalueのみを取得できます。
テーブルの内容を変更する場合は、実際にテーブルを変更する必要があります。例えば:
for key,value in pairs(myTable) do --actualcode
myTable[key] = "foobar"
end
myTable
の使用に注意してください。ある時点でテーブル自体を使用せずにテーブルを変更することはできません。 myTable
を介して、またはテーブルへの参照を格納する他の変数を介してアクセスされるテーブルであるかどうか。
一般に、繰り返し処理中にテーブルを変更すると、問題が発生する可能性があります。ただし、Luaは次のように述べています。
next
の動作は、トラバース中に、テーブル内の存在しないフィールドに値を割り当てた場合、未定義です。ただし、既存のフィールドは変更できます。特に、既存のフィールドをクリアできます。
したがって、すでに存在するフィールドの値を変更することは完全に有効です。また、key
は明らかにテーブルにすでに存在するため、変更できます。問題なくnil
に設定することもできます。
Luaの変数は、値の保持者にすぎません。テーブルには値が含まれます。 myTable[key]
は値を返します。その値を変数に保存できますが、変数を変更するとnotはmyTable[key]
の値を変更します。テーブルは参照によって保存されるため、ある変数のテーブルの内容を変更して別の変数の変更を確認できますが、それはテーブル自体ではなく、単にテーブルのcontentsです。