Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 为什么可以将uu索引设置为表_Lua_Metatable_Meta Method - Fatal编程技术网

Lua 为什么可以将uu索引设置为表

Lua 为什么可以将uu索引设置为表,lua,metatable,meta-method,Lua,Metatable,Meta Method,索引元方法可以设置为等于表。据我所知 foo.__index = function(self, k) return bar[k] end 及 都是一样的。为什么在这种情况下允许以这种方式声明函数?这不是函数声明-将表分配给\u index只是使用您描述的函数的快捷方式 From(对于Lua5.0,但语言的这一部分没有改变): 使用_索引元方法进行继承非常普遍,以至于 Lua提供了一个快捷方式。尽管名称不同,_索引元方法也有相同的功能 不需要是函数:它可以是表。当它是一个 函数,Lua调

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

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


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

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

From(对于Lua5.0,但语言的这一部分没有改变):

使用_索引元方法进行继承非常普遍,以至于 Lua提供了一个快捷方式。尽管名称不同,_索引元方法也有相同的功能 不需要是函数:它可以是表。当它是一个 函数,Lua调用它,表和缺席键作为它的 论据。当它是一个表时,Lua将重做对该表的访问


它不像你神奇地分配的表格变成了一个函数<代码>类型(foo.\uu index)仍将返回
,并且您仍然可以使用它执行与其他表相同的操作,例如使用
下一步
,等等。

看看Lua字符串库,了解当您可以访问
foo
表时,索引函数不允许
bar
字段列表的示例。这是真的,是的-我想这意味着该功能在技术上不是语法糖。我将稍微调整一下我的答案。:)
foo.__index = bar