我试图将表的花括号定义内的一项分配给先前定义的另一项。但是Lua说,一旦在其定义内引用该表,便无法找到该表本身。
这是我要实现的目标的一个示例:
local t = {
a = 1,
b = 2,
c = t.a + t.b
}
一旦接近t.a
,Lua将无法找到t
并返回错误。
如何在t.a
中定义t.b
的同时引用c
和t
,而又不留大括号定义?
答案 0 :(得分:3)
尴尬,但是:
local t
do
local a = 1
local b = 2
t = {a, b, c = a + b}
end
print(t.c) -- 3
在没有do/end
块的情况下,a
和b
变量将在t
之外可见。
据我所知,没有直接方法可以引用a
和b
,除非1)这些变量事先存在(在示例中)或2)一旦表构造完成。 >
答案 1 :(得分:3)
如您所提,您不能。
“ The order of the assignments in a constructor is undefined。”
因此,“先前定义”不是表构造函数中的概念。
“ The scope of a local variable begins at the first statement after its declaration”。
因此,无法引用语句结尾之前的代码中显示的局部变量t
。 t
将绑定到先前声明的变量或全局变量t
。