在 Lua 中,表字段在创建时进行评估。在您的示例中,当您尝试在 last_distance 的定义中访问它时,table.distance 尚未创建,这就是您收到错误的原因。
实现您想要的一种方法是使用函数创建表并返回它。在函数内,您可以按正确的顺序定义 distance 和 last_distance,然后返回表。这是一个例子:
local function createTable()
local t = {
distance = 30.0,
last_distance = nil,
}
t.last_distance = t.distance - 10.0
return t
end
local myTable = createTable()
print(myTable.distance) -- Output: 30.0
print(myTable.last_distance) -- Output: 20.0
这样,last_distance 字段是在定义 distance 之后定义的,因此 last_distance 的计算可以使用正确的 distance 值。
或者,您可以在定义距离后使用表构造函数设置 last_distance:
local table = {
distance = 30.0,
last_distance = function(t) return t.distance - 10.0 end,
}
print(table.distance) -- Output: 30.0
print(table.last_distance(table)) -- Output: 20.0
在这里,last_distance 被定义为一个函数,它将表格作为参数并返回计算值。当您需要访问 last_distance 的值时,您可以调用该函数并将表作为参数传入。