我有一个像这样的lua表:
local defaultSize = 14
local field = {
sizeA = defaultSize,
sizeB = sizeA,
}
我的目的是将sizeB设置为field.sizeA的值,但上面的代码不起作用。在这种情况下,field.sizeB为零。
如何将sizeB直接设置为表定义中的sizeA?
答案 0 :(得分:1)
你可以在表中使用init函数并调用:
local defaultSize = 14
local field = {
init = function (self, size)
self.sizeA = size or defaultSize -- size only if given, otherwise defaultSize
self.sizeB = self.sizeA
end
}
field:init() -- implicit "self" arg is "field", defaultSize will be used
field:init(16) -- size will be 16 rather than 14
print(field.sizeB) -- prints 14
这具有将表实例的所有初始化聚合在一个地方的明显优势,一旦逻辑变得更复杂,就可以有条件等。你不必将init()作为表的成员,但保持依赖关系明显并且紧密结合总是一个好主意。