lua __index __newindex upvalue 示例

本文介绍了在Lua项目中,为了简化公会对象属性的访问,通过设置__index和__newindex实现直接访问和修改属性。然而,设置后导致无法直接给对象添加新属性,因为新属性会被添加到u.data中。文章通过实例展示了正确使用__index和__newindex的方法,以及它们如何影响程序行为,特别是upvalue在其中的作用。同时提醒在涉及动态修改data的情况下,推荐使用function设置__index和__newindex,并注意self的指向问题。
摘要由CSDN通过智能技术生成

        项目中有个公会对象,数据大部分存在data中,之前都是 u.data.point这样访问,太麻烦了。

于是通过设置__index 使之可以直接访问属性,u.point。

但是还是不能直接改属性,u.point = 4,所以再设置了__newindex。

在设置了setmetatable之后,不能直接给u添加新属性,因为设置了__newindex,新的属性将直接加到u.data中的。 

Union = {  
    data = nil,  
    dirty = nil,  
}  
--- 生成新的对象  
function Union:new(o)  
    o = o or {}  
    setmetatable(o,self)  
    self.__index = self  
    return o  
end  
--- 初始化Union数据  
function Union:init(data)  
    self:initTable()  
    self.data = data  
    local meta = {}  
    meta.__index = function (table, key)  
        if Union[key] ~= nil then  
            return Union[key]  
        else  
          
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值