Lua初始化表

发布于 2024-10-28 04:20:39 字数 142 浏览 2 评论 0原文

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

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

print(test.y)

我预计 test.y 将为 5,但事实并非如此。为什么?

In Lua when I created a table the following way...

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

print(test.y)

I expected that test.y would be 5, it is not. Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白云不回头 2024-11-04 04:20:39

来自Lua 编程,第二版。 ,第 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

From Programming in Lua, 2nd ed., page 23, chapter 3.6 Table Constructors:

... That is, all tables are created equal; constructors affect only their initialization.
Every time Lua evaluates a constructor, it creates and initializes a new table. ...

So, the table constructor { x=5 , y = test.x } first creates a new table object, which, after fully being evaluated (!) gets assigned to name test.

This is what more or less happens in your code:

test = {}
TEMP_TABLE = { x=5 , y=test.x } --> x=5, y=nil
test = TEMP_TABLE
烟酉 2024-11-04 04:20:39

这只是因为 test.x 仅在执行 tat 语句后才存在。所以这是可行的:

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

因此,

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

您实际上将使用 t={} 生成的表替换为新表,并获取旧表中键 x 的值,即 nil。

That's simply because test.x only exists after tat statement has been executed. So this would work:

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

so where you do

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

you actually replace the table you generated with t={} with a new one, and take the value of the key x in the old one, which is nil.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文