如何将表定义中的项目分配给同一表中的另一个项目?

时间:2019-03-29 23:21:45

标签: lua lua-table

我试图将表的花括号定义内的一项分配给先前定义的另一项。但是Lua说,一旦在其定义内引用该表,便无法找到该表本身。

这是我要实现的目标的一个示例:

local t = {
    a = 1,
    b = 2,
    c = t.a + t.b
}

一旦接近t.a,Lua将无法找到t并返回错误。

如何在t.a中定义t.b的同时引用ct,而又不留大括号定义?

2 个答案:

答案 0 :(得分:3)

尴尬,但是:

local t
do
    local a = 1
    local b = 2

    t = {a, b, c = a + b}           
end

print(t.c) -- 3

在没有do/end块的情况下,ab变量将在t之外可见。

据我所知,没有直接方法可以引用ab,除非1)这些变量事先存在(在示例中)或2)一旦表构造完成。 >

答案 1 :(得分:3)

如您所提,您不能。

The order of the assignments in a constructor is undefined。”

因此,“先前定义”不是表构造函数中的概念。

还有“ The assignment statement first evaluates all its expressions and only then the assignments are performed。”

The scope of a local variable begins at the first statement after its declaration”。

因此,无法引用语句结尾之前的代码中显示的局部变量tt将绑定到先前声明的变量或全局变量t