在Lua中,当我按照以下方式创建表格时......
test={}
test = { x=5 , y = test.x}
print(test.y)
我预计test.y会是5,而不是。为什么呢?
答案 0 :(得分:3)
来自Programming in Lua, 2nd ed.,第23页, 3.6表构造函数章节
......也就是说,所有表都是相同的;构造函数只影响它们的初始化。 每次Lua评估构造函数时,它都会创建并初始化一个新表。 ...
因此,表构造函数{ x=5 , y = test.x }
首先创建一个新的表对象,在完全评估之后(!)被赋值为test
。
这或多或少会在您的代码中发生:
test = {}
TEMP_TABLE = { x=5 , y=test.x } --> x=5, y=nil
test = TEMP_TABLE
答案 1 :(得分:2)
这只是因为test.x仅在tat语句执行后才存在。所以这会奏效:
test={}
test.x=5
test.y=test.x
所以你在哪里
test={x=5,y=test.x}
您实际上用新t={}
替换了您生成的表格,并将旧密钥x的值取为nil。