lua索引不返回多个值

时间:2014-11-25 10:50:14

标签: indexing 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

是什么原因?

1 个答案:

答案 0 :(得分:2)

可能没有理由,但保持表索引的语义没有元表。

行为记录在Reference Manual中。解释索引元方法语义的代码会在__index为函数时调整返回值的值。