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

原因是什么?

点赞
用户199201
用户199201

可能没有理由,但是保留表的索引语义而不使用元表。

该行为在参考手册中有所介绍。当__index是一个函数时,索引元方法的语义解释代码会调整返回的值为1。

2014-11-25 12:32:28