天天看点

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

总结:

这种问题在有类继承的地方会出现,但一般都是声明或使用字段不当导致的

继续阅读