1

Luaで次の方法でテーブルを作成したとき...

test={}
test = { x=5 , y = test.x}

print(test.y)

test.yは5になると思っていましたが、そうではありません。なんで?

4

2 に答える 2

3

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
于 2011-03-30T09:18:38.970 に答える
2

これは、test.xがtatステートメントの実行後にのみ存在するためです。したがって、これは機能します:

test={}
test.x=5
test.y=test.x

だからあなたがするところ

test={x=5,y=test.x}

実際に、生成したテーブルを新しいテーブルに置き換え、t={}古いテーブルのキーxの値(nil)を取得します。

于 2011-03-30T09:12:42.690 に答える