为什么你可以将__index设置为等于表

时间:2017-06-02 04:00:22

标签: lua metatable meta-method

索引元方法可以设置为等于表。据我所知

foo.__index = function(self, k)
    return bar[k]
end

foo.__index = bar

是一样的。为什么在这种情况下允许以这种方式声明函数?

1 个答案:

答案 0 :(得分:2)

这不是函数声明 - 将表格分配给__index只是使用您描述的函数的快捷方式。

来自Programming in Lua(对于Lua 5.0,但这部分语言没有改变):

  

使用__index元方法进行继承是如此常见   Lua提供了一个捷径。尽管有这个名字,但__index元方法确实如此   不需要是一个函数:它可以是一个表,而不是。当它是一个   函数,Lua用表和缺席键调用它   参数。当它是一个表时,Lua重做该表中的访问权。

它不像你神奇地分配的表成为一个功能。 type(foo.__index)仍会返回table,您仍可以使用其他表格执行此操作,例如使用pairsnext等。