Lua 初始化表格。

在 Lua 中,我创建了一个表格,方式如下...

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

print(test.y)

我预期test.y应该是5,但它实际上不是。为什么?

原文链接 https://stackoverflow.com/questions/5484094

点赞
stackoverflow用户513763
stackoverflow用户513763

这是因为 test.x 只有在执行该语句后才存在。因此,以下代码会起作用:

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

当你执行

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

你实际上替换了你生成的表 t={},并使用旧表中键 x 的值,该键值为 nil

2011-03-30 09:12:42
stackoverflow用户50476
stackoverflow用户50476

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
2011-03-30 09:18:38