【发布时间】:2013-05-07 06:14:18
【问题描述】:
我在 Lua 上有一堂课。在这个构造函数中,我声明了变量(在一个空表中),然后我想访问对象的函数以在这个表中插入对象。我的代码是这样的:
local BoxClass = require("Box")
local SurpriseBox = {}
local SurpriseBox_mt = { __index = SurpriseBox } -- metatable
function SurpriseBox.new() -- constructor
local object = {
boxes = {}
}
SurpriseBox:CreateBoxes()
print('constructor -> ' .. #object.boxes) --> 0
return setmetatable( object, SurpriseBox_mt )
end
-------------------------------------------------
function SurpriseBox:CreateBoxes()
local box1 = BoxClass.new('palo', 'images/chestClose.gif', 'OPEN')
local box2 = BoxClass.new('moneda', 'images/chestClose.gif', 'OPEN')
self.boxes = { box1, box2}
end
访问函数 CreateBoxes() 后,表格内没有任何内容。
感谢您的帮助!
【问题讨论】:
-
查看我的答案以获得解释。至于您的代码,您正在复制表创建。也就是说,在您的构造函数中创建一个空的
boxes表,并在CreateBoxes函数中将该表替换为另一个表。所以要么不要在构造函数中创建它,要么只填写CreateBoxes。否则效率低下。 -
感谢您的帮助,但只有一个问题。如果我在构造函数中创建
boxes表并且我想在CreateBoxes()函数中插入元素,我可以这样做吗?table.insert(self.boxes, element) -
是的,你可以。由于您只插入 2 个元素,因此没有太大区别,但一般来说,如果您要填充数组,最好跟踪变量中的元素数量(例如
index),然后进行简单赋值-self.boxes[index] = element。它更有效,因为table.insert总是检查数组中的项目数,然后才插入项目。 -
完美!非常感谢!
标签: android class lua coronasdk