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
作为实际的元表。那么,有人知道医生是怎么回事吗?

你对这个词的含义理解不正确。如果说它是“metamethod
Y
在X中查找”,并不意味着它在X表中搜索名为
Y
的条目。这意味着它获取X的元表并查找名为
Y
的条目,就像文档中指定的
rawget(getmetatable(X)或{},“Y”)

该术语在元方法描述中反复使用。例如:

首先,Lua将检查第一个操作数(即使它是有效的)。如果该操作数没有为
\uu add
定义元方法,则Lua将检查第二个操作数

它不是询问第一个(或第二个)操作数是否有方法
\uu add
;它询问他们是否有一个元方法
\uu add

正如您从
\u add
示例中所看到的,您必须指定它尝试从哪些操作数获取元方法,以及以何种顺序获取元方法。对于
table[key]
,本文的重点是不尝试从
key
获取元方法,而只从
table
获取元方法。这似乎有点明显,但完整总比不完整好