在 Lua 中,从构造函数访问函数。

我在 Lua 中有一个类。在这个构造函数中,我声明了变量(在一个空表中),然后我想访问对象的函数来将对象插入到这个表中。我的代码是这样的:

local BoxClass = require("Box")
local SurpriseBox = {}
local SurpriseBox_mt = { __index = SurpriseBox }    -- 元表

function SurpriseBox.new()  -- 构造函数
  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() 后,表中没有任何东西。

感谢您的帮助!

点赞
用户2198692
用户2198692

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

function SurpriseBox.new()  -- 构造函数
  local object = setmetatable( {boxes = {}}, SurpriseBox_mt )
  SurpriseBox.CreateBoxes(object)  -- 在调用 CreateBoxes() 之前先给 object 赋予元表,并在 object 上调用
  print('constructor -> ' .. #object.boxes)
end

关键在于在调用 CreateBoxes() 之前为 object 赋予元表,并在 object 上调用它,而不是在 SurpriseBox 上调用。

2013-05-13 09:08:28