Lua:获取表本身的值
所以我正在尝试一些我认为应该很简单的东西,但我就是不能让它工作 基本上我想做的是:Lua:获取表本身的值,lua,scope,lua-table,Lua,Scope,Lua Table,所以我正在尝试一些我认为应该很简单的东西,但我就是不能让它工作 基本上我想做的是: myTable = { a = 1, b = a + 1 } 这不起作用,我得到的错误是“a”为零。合理的。 我已经尝试过的是 myTable = { a = 1, b = myTable.a + 1 } 及 但它给我的错误是“myTable”/“self”为零 我觉得这个解决方案相当简单,但我自己找不到,谷歌也没有那么大的帮助。在一条语句中无法做到这一点(至少不能不调用任何函数或使用元表)。
myTable = {
a = 1,
b = a + 1
}
这不起作用,我得到的错误是“a”为零。合理的。
我已经尝试过的是
myTable = {
a = 1,
b = myTable.a + 1
}
及
但它给我的错误是“myTable”/“self”为零
我觉得这个解决方案相当简单,但我自己找不到,谷歌也没有那么大的帮助。在一条语句中无法做到这一点(至少不能不调用任何函数或使用元表)。这是因为在像
foo=bar
这样的语句中,直到对bar表达式求值之后,才会赋值foo变量
在第二个示例中,myTable
变量直到右大括号才赋值,因此myTable.a+1
中的myTable
被视为未指定的全局变量,并获得值nil
。第三个示例中的self
是相同的,只是以后不尝试为其分配任何内容。(在Lua中,self
只是使用冒号语法编写的特殊内部函数。)
要想做你想做的事,你必须做如下事情:
myTable = {
a = 1
}
myTable.b = myTable.a + 1
或者这个:
local a = 1
myTable = {
a = a,
b = a + 1
}
在一条语句中无法做到这一点(至少在不调用任何函数或使用元表的情况下)。这是因为在像
foo=bar
这样的语句中,直到对bar表达式求值之后,才会赋值foo变量
在第二个示例中,myTable
变量直到右大括号才赋值,因此myTable.a+1
中的myTable
被视为未指定的全局变量,并获得值nil
。第三个示例中的self
是相同的,只是以后不尝试为其分配任何内容。(在Lua中,self
只是使用冒号语法编写的特殊内部函数。)
要想做你想做的事,你必须做如下事情:
myTable = {
a = 1
}
myTable.b = myTable.a + 1
或者这个:
local a = 1
myTable = {
a = a,
b = a + 1
}
请注意,对于尝试3,没有self
(需要方法定义)的上下文,因此它将引用全局self
(可能是nil
)。请注意,对于尝试3,没有self
(需要方法定义)的上下文,因此它将引用全局self
(可能是nil
)。