从Lua中的构造函数访问函数

时间:2013-05-13 08:57:56

标签: android class lua corona

我在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()之后,表中没有任何内容。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

当您致电SurpriseBox:CreateBoxes()时,self参数仍然指向SurpriseBox表,而不是您创建的object表。你应该这样做:

function SurpriseBox.new()  -- constructor
  local object = setmetatable( {boxes = {}}, SurpriseBox_mt )
  object:CreateBoxes()
  print('constructor -> ' .. #object.boxes)
end

关键是在调用CreateBoxes()之前分配metatable并在object上调用,而不是SurpriseBox