Luaで次の方法でテーブルを作成したとき...
test={}
test = { x=5 , y = test.x}
print(test.y)
test.yは5になると思っていましたが、そうではありません。なんで?
Luaで次の方法でテーブルを作成したとき...
test={}
test = { x=5 , y = test.x}
print(test.y)
test.yは5になると思っていましたが、そうではありません。なんで?
Luaでのプログラミングから、第2版。、23ページ、3.6章テーブルコンストラクタ:
...つまり、すべてのテーブルが等しく作成されます。コンストラクターは、初期化にのみ影響します。Luaはコンストラクターを評価するたびに、新しいテーブルを作成して初期化します。..。
したがって、テーブルコンストラクター{ x=5 , y = test.x }
は最初に新しいテーブルオブジェクトを作成します。このオブジェクトは、完全に評価された後(!)、nameに割り当てられますtest
。
これはあなたのコードで多かれ少なかれ起こることです:
test = {}
TEMP_TABLE = { x=5 , y=test.x } --> x=5, y=nil
test = TEMP_TABLE
これは、test.xがtatステートメントの実行後にのみ存在するためです。したがって、これは機能します:
test={}
test.x=5
test.y=test.x
だからあなたがするところ
test={x=5,y=test.x}
実際に、生成したテーブルを新しいテーブルに置き換え、t={}
古いテーブルのキーxの値(nil)を取得します。