__index表示对元表的访问,__newindex表示对元表更新
通常lua语言在进行新的键赋值的时候,默认情况下是如果没有找到,那么就将键放在表里面,暂且不管表中是怎么实现的,在新的键放在里面之后,就可以对其进行访问。
然而如果在设置了元表之后,__index与__newindex会改变这种逻辑。
__index设置之后,那么如果在遇到了没有的键只有,会去元表中找,如果元表中没有,那么就返回空,注意这里直接返回空,不会对元表和现在的表做改变,所以index被称为查找。
local table = {}
local f = setmetatable({key = "a"},{__index = table})
function test()
f.key2 = "b"
print(f.key2,table.key2)
end
test()
__newindex设置之后,如果遇到了没有的键,那么同样也会去元表中找,但是如果元表中没有,那么就会添加进元表中。注意这里直接添加进了元表,也就是说,后面如果需要找该键值,就会从元表中读取。
local table = {}
local f = setmetatable({key = "a"},{__newindex = table})
function test()
f.key2 = "b"
print(f.key2,table.key2)
end
test()