Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua:获取表本身的值_Lua_Scope_Lua Table - Fatal编程技术网

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
)。