3

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

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

foo.__index = bar

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

4

1 回答 1

2

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

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

__index 元方法用于继承是如此普遍,以至于 Lua 提供了一个快捷方式。尽管有这个名字,__index 元方法不需要是一个函数:它可以是一个表,而是。当它是一个函数时,Lua 用表和缺失的键作为它的参数来调用它。当它是一个表时,Lua 会重做对该表的访问。

它不像你分配的表格变成了一个函数。type(foo.__index)仍然会返回table,你仍然可以用它做你可以用其他表做的事情,比如使用pairsandnext等。

于 2017-06-02T04:46:40.277 回答