索引元方法可以设置为等于表。据我所知
foo.__index = function(self, k)
return bar[k]
end
和
foo.__index = bar
是一样的。为什么在这种情况下允许以这种方式声明函数?
答案 0 :(得分:2)
这不是函数声明 - 将表格分配给__index
只是使用您描述的函数的快捷方式。
来自Programming in Lua(对于Lua 5.0,但这部分语言没有改变):
使用__index元方法进行继承是如此常见 Lua提供了一个捷径。尽管有这个名字,但__index元方法确实如此 不需要是一个函数:它可以是一个表,而不是。当它是一个 函数,Lua用表和缺席键调用它 参数。当它是一个表时,Lua重做该表中的访问权。
它不像你神奇地分配的表成为一个功能。 type(foo.__index)
仍会返回table
,您仍可以使用其他表格执行此操作,例如使用pairs
和next
等。