Lua rawset和rawget的用法

rawset 和rawget 操作非元表里面的值,所以想获取或设置不是元表里面的值时候使用。

local a = {b = 1,c = 2}
local e = {f = 3,g = 4}
setmetatable(a,e)
e.__index = function(t,key)
    return rawget(t,key)
end
e.__newindex = function(t,k,v)
    rawset(t, k ,v)
end

print(a.f)
a.f = 5
print(a.f)
print(e.f)

输入结果:

nil
5
3
[Finished in 0.0s]

可以看出,把__index 设置成只获取非元表内容,结果就是e虽然是a的元表,但起不到效果。

__newindex 的设置值,也只修改非元表的内容。

所以输出结果e.f 还是3,没有发生改变。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页