天天看點

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

總結:

這種問題在有類繼承的地方會出現,但一般都是聲明或使用字段不當導緻的

繼續閱讀