簡體   English   中英

為什么醫生在表中說“ __index”?

[英]Why does the doc say `__index` is looked up in the table?

Lua 5.3 doc中

__index索引訪問table[key] ...元方法在tabletable

它對於__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM