【问题标题】:why can you set __index equal to a table为什么可以设置 __index 等于一个表
【发布时间】:2017-06-02 16:55:50
【问题描述】:

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

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

foo.__index = bar

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

【问题讨论】:

  • 查看 Lua 字符串库,了解何时将表分配给 __index

标签: lua metatable meta-method


【解决方案1】:

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

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

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

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

【讨论】:

  • 当您有权访问foo 表时,使用函数不允许列出bar 字段。
  • 没错,是的——我想这意味着这个功能在技术上不是语法糖。我会稍微调整一下我的答案。 :)
猜你喜欢
  • 2021-03-29
  • 2019-02-11
  • 2017-03-23
  • 2017-02-01
  • 1970-01-01
  • 2023-04-10
  • 2022-01-20
  • 2015-07-24
  • 1970-01-01
相关资源
最近更新 更多