![](/img/trans.png)
[英]Why does it say: “Bad argument #1 to 'remove' (table expected, got nil)'”
[英]Why does the doc say `__index` is looked up in the table?
從Lua 5.3 doc中 :
__index
:索引訪問table[key]
。 ...元方法在table
中table
。
它對於__newindex
表示相同的內容,但對於其他任何元方法都沒有說明。
如果這是真的(不是),那將是對Lua以前版本的重大偏離。 如我所料,以下代碼輸出nil
,但與文檔不一致。
#!/usr/bin/env lua5.3
local proto = {a = 54}
local t0 = {__index = proto}
print(t0.a)
需要說明的是:如果文檔正確,我希望上面的代碼中的t0
只需要一個__index
字段,而t0.a
的實際元表為54
。 那么有人知道該文檔發生了什么嗎?
您錯誤地解釋了該術語的含義。 說它是“在X中查找Y
方法”並不意味着它在X表中搜索名為Y
的條目。 這意味着它將獲取X的元表,並查找名為Y
的條目,就像通過docs中指定的rawget(getmetatable(X) or {}, "Y")
一樣。
該術語在元方法描述中反復使用。 例如:
首先,Lua將檢查第一個操作數(即使它是有效的)。 如果該操作數未為
__add
定義元__add
,則Lua將檢查第二個操作數。
它不是在問第一個(或第二個)操作數是否具有方法__add
; 它詢問他們是否有元方法 __add
。
從__add
示例中可以看到,您必須指定它嘗試從哪個操作數中獲取元方法,以及以什么順序進行獲取。 對於table[key]
,文本的重點是不會嘗試從key
那里獲取元方法,而只是從table
那里獲取。 這似乎有些明顯,但是完整性比不完整性要好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.