Lua5.3文档中__index元方法描述存疑,与代码运行结果不符
关于Lua 5.3文档中__index元方法描述的疑惑
我最近啃Lua 5.3文档的时候,碰到个百思不得其解的点:文档里对__index元方法的描述是这样的:
__index:索引访问table[key]时……元方法需在表中查找。
而且__newindex的描述也是同理,但其他元方法却没有这个特殊要求。
如果真按文档描述的逻辑来,这会和Lua旧版本有重大差异,但实际测试下来根本不是这么回事。比如我跑了下面这段代码:
#!/usr/bin/env lua5.3 local proto = {a = 54} local t0 = {__index = proto} print(t0.a)
这段代码输出的是nil,这符合我们对Lua实际行为的预期——因为t0只是个普通表,并没有被设置成某个表的元表,所以__index字段在这里就是个普通键值,不会触发元方法逻辑。但这和文档里的描述完全矛盾,如果按文档说的“元方法需在表中查找”,我原本预期t0.a会返回54才对,毕竟t0里确实有__index这个字段指向了包含a的proto表。
内容的提问来源于stack exchange,提问作者luther
相关产品推荐
相关产品推荐

