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

我试图将表的花括号定义中的项目分配给先前定义的另一个项目。但是Lua在其定义中引用表本身时无法找到它。

这是我试图实现的示例:

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

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

如何在 t 中定义 c 时引用 t.at.b 而不离开花括号定义

点赞
用户4403144
用户4403144

尴尬,但是:

local t
do
    local a = 1
    local b = 2

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

print(t.c) -- 3

如果没有 do/end 块,ab 变量将在 t 外可见。

据我所知,除非 1)这些变量事先存在(上面的示例)或 2)完成表构建后,否则没有直接引用 ab 的方法。

2019-03-30 00:02:55
用户2226988
用户2226988

如您所提出的,您不能。

"构造函数中的赋值顺序未定义。"

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

同时,“赋值语句首先计算其所有表达式,然后才执行赋值操作”。

还有,“本地变量的作用域始于声明后的第一条语句”。

因此,在代码中显示的本地变量t在语句结束之前不能被引用。t将绑定到之前声明的变量或全局变量t

2019-03-30 13:10:47