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 ? 2.错误的__newindex 3??? 103??? 3??? 3 3.错误的__index 3??? 103??? 3??? 3 ? ? ? 这里影响程序的不同结果是upvalue导致的。 由于一般程序中有可能动态改data。所以建议用function设置__index和__newindex,尤其注意各个不同函数中self指向的是什么对象。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |