微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

lua __index __newindex upvalue 示例

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

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

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

 

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

 

 

 

 

通过修改__index和__newindex会获得不同的结果。

 

1.正确结果

3    103    3    3
4    103    4    4
4    103    103    103
4    104    104    104

 

2.错误的__newindex

3    103    3    3
4    103    4    4
4    103    103    103
104    103    103    103

3.错误的__index

3    103    3    3
4    103    4    4
4    103    4    103
4    104    4    104

 

 

 

这里影响程序的不同结果是upvalue导致的。

由于一般程序中有可能动态改data。所以建议用function设置__index和__newindex,尤其注意各个不同函数中self指向的是什么对象。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐