我有一个 Lua 类(class)。在此构造函数中,我声明变量(在空表中),然后我想访问对象的函数以在此表中插入对象。我的代码是这样的:
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() 后,表中没有任何内容。
感谢您的帮助!
最佳答案
当您调用SurpriseBox:CreateBoxes()
时,self
参数仍然指向SurpriseBox
表,而不是对象
您创建的表。你可能应该这样做:
function SurpriseBox.new() -- constructor
local object = setmetatable( {boxes = {}}, SurpriseBox_mt )
object:CreateBoxes()
print('constructor -> ' .. #object.boxes)
end
关键是在调用CreateBoxes()
之前分配元表,并在对象
上调用它,而不是SurpriseBox
。
关于android - 从 Lua 的构造函数访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16518206/