2
我在Lua有一個類。在這個構造函數中,我聲明瞭變量(在一個空的表格中)並在我想要訪問該對象的函數以便在此表格中插入對象之後。我的代碼是這樣的:來自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」中。否則它效率低下。 – 2013-05-13 09:25:45
感謝您的幫助,但只有一個問題。如果我在構造函數中創建'boxes'表,並且想要在'CreateBoxes()'函數中插入元素,我可以這樣做嗎? 'table.insert(self.boxes,element)' – Crisiiii 2013-05-13 10:37:11
是的,你可以。由於只插入2個元素,所以沒有太大的區別,但通常情況下,如果要填充數組,最好跟蹤變量中元素的數量(例如'index'),然後執行明確的賦值 - 'self.boxes [index] = element'。它更高效,因爲'table.insert'總是檢查數組中的項目數量,然後才插入項目。 – 2013-05-13 10:43:45