Lua 为什么文档说“索引”在表中查找?
从:Lua 为什么文档说“索引”在表中查找?,lua,lua-5.3,Lua,Lua 5.3,从: \u index:索引访问表[键]。。。元方法在表中查找 它对\uuuu newindex说了同样的话,但对任何其他元方法都没有 如果这是真的(事实并非如此),那么这将是对Lua以前版本的一个重大改变。正如我所期望的,下面的代码输出了nil,但它与文档不一致 #!/usr/bin/env lua5.3 local proto = {a = 54} local t0 = {__index = proto} print(t0.a) 需要明确的是:如果文档是正确的,我希望上述代码中的t0只需
\u index
:索引访问表[键]
。。。元方法在表中查找
它对\uuuu newindex
说了同样的话,但对任何其他元方法都没有
如果这是真的(事实并非如此),那么这将是对Lua以前版本的一个重大改变。正如我所期望的,下面的代码输出了nil
,但它与文档不一致
#!/usr/bin/env lua5.3
local proto = {a = 54}
local t0 = {__index = proto}
print(t0.a)
需要明确的是:如果文档是正确的,我希望上述代码中的t0
只需要\u索引
字段,而t0.a
将54
作为实际的元表。那么,有人知道医生是怎么回事吗?你对这个词的含义理解不正确。如果说它是“metamethodY
在X中查找”,并不意味着它在X表中搜索名为Y
的条目。这意味着它获取X的元表并查找名为Y
的条目,就像文档中指定的rawget(getmetatable(X)或{},“Y”)
该术语在元方法描述中反复使用。例如:
首先,Lua将检查第一个操作数(即使它是有效的)。如果该操作数没有为\uu add
定义元方法,则Lua将检查第二个操作数
它不是询问第一个(或第二个)操作数是否有方法\uu add
;它询问他们是否有一个元方法\uu add
正如您从\u add
示例中所看到的,您必须指定它尝试从哪些操作数获取元方法,以及以何种顺序获取元方法。对于table[key]
,本文的重点是不尝试从key
获取元方法,而只从table
获取元方法。这似乎有点明显,但完整总比不完整好