所以我尝试了一些我觉得应该很容易的事情,但我无法让它发挥作用......
基本上我要做的是:
myTable = {
a = 1,
b = a + 1
}
这不起作用,我得到错误" a"没有。合理。 我已经尝试过的是
myTable = {
a = 1,
b = myTable.a + 1
}
和
myTable = {
a = 1,
b = self.a + 1
}
但它让我错误地认为" myTable" /" self"是零。
我觉得解决方案相当简单,但我自己也找不到它,谷歌也不是那么有用。
答案 0 :(得分:3)
在一个语句中没有办法做到这一点(至少在没有调用任何函数或使用元表的情况下)。那是因为在foo = bar
之类的语句中,在评估条形表达式之前,不会分配foo变量。
在第二个示例中,myTable
变量在结束大括号之前未分配,因此myTable
中的myTable.a + 1
被视为未分配的全局变量,并获取值nil
。第三个示例中的self
是相同的,只是您以后不尝试为其指定任何内容。 (在Lua中,self
只是使用冒号语法编写的特殊内部函数。)
要做你想做的事,你必须做这样的事情:
myTable = {
a = 1
}
myTable.b = myTable.a + 1
或者这个:
local a = 1
myTable = {
a = a,
b = a + 1
}