2014-11-25 83 views
2

對象應該包含每個索引的一對值。lua索引不返回多個值

object = {} 

function object:new() 
    self.elements = {} 
    setmetatable(self, self) 
    return self 
end 

function object:append(first, second) 
    self.elements[#self.elements + 1] = {first, second} 
end 

function object:__index(k) 
    return unpack(self.elements[k]) 
end 

當我嘗試通過索引訪問值時,我只獲得該對的第一個值。

o:append(1,2) 
o:append(3,4) 

> return o[1] 
1 

直接__index方法涉及產生預期結果。

> return o:__index(1) 
1  2 

是什麼原因?

+3

就是這樣。 – lhf 2014-11-25 11:10:16

回答

2

可能沒有理由,但保持表索引的語義沒有metatables。

行爲記錄在Reference Manual。解釋索引元方法的語義的代碼調整__index是函數時返回的值。

+0

這很可悲。 __index metamethod的多次返回不會破壞與以前編寫的代碼的向後兼容性。 – hexum 2014-11-26 12:41:00

+1

那麼,'{t [i]}'應該有長度'1'。當您的索引操作返回多個值時,這不再成立。 – mkluwe 2014-11-26 14:17:55