1. 程式人生 > >lua設定一個table的某欄位為nil後,再訪問該欄位竟然不是nil??!!

lua設定一個table的某欄位為nil後,再訪問該欄位竟然不是nil??!!

問題可以概括如下:

a.b = nil -- a是一個lua table
print(a.b == nil)

--輸出
false

熟悉lua的可能已經猜到了,metatable導致的,寫了個測試
local a = {t = 3}
local b = {t = 1}

setmetatable(b ,{__index = a})

print(b.t)
b.t = nil
print(b.t)
--輸出
1
3

果不其然,整個過程是:在b.t = nil 後取b.t 時取不到,就去找metatable中的a了,找到了是3

總結:

這種問題在有類繼承的地方會出現,但一般都是宣告或使用欄位不當導致的