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