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 回答