Lua初始化表

时间:2011-03-30 08:51:18

标签: lua initialization lua-table

在Lua中,当我按照以下方式创建表格时......

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

print(test.y)

我预计test.y会是5,而不是。为什么呢?

2 个答案:

答案 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。