索引元方法可以设置为等于表。据我所知
foo.__index = function(self, k)
return bar[k]
end
和
foo.__index = bar
是相同的。为什么在这种情况下允许以这种方式声明函数?
索引元方法可以设置为等于表。据我所知
foo.__index = function(self, k)
return bar[k]
end
和
foo.__index = bar
是相同的。为什么在这种情况下允许以这种方式声明函数?
这不是函数声明 - 将表分配给__index
只是使用您描述的函数的快捷方式。
来自Programming in Lua(对于 Lua 5.0,但这部分语言没有改变):
__index 元方法用于继承是如此普遍,以至于 Lua 提供了一个快捷方式。尽管有这个名字,__index 元方法不需要是一个函数:它可以是一个表,而是。当它是一个函数时,Lua 用表和缺失的键作为它的参数来调用它。当它是一个表时,Lua 会重做对该表的访问。
它不像你分配的表格变成了一个函数。type(foo.__index)
仍然会返回table
,你仍然可以用它做你可以用其他表做的事情,比如使用pairs
andnext
等。