我正在尝试教我的一个朋友,基本上,他是用这个代码来找我的,它让我很难过:
a = {name = "aaa"} function a:new() self.x = "sss" o = {} setMetatable(o,self) self.__index = self return o end function a:some() return "[ " .. self.name .. " ]" end b = a:new() print(b:some()) print(b.x)
打印
[aaa]
SSS
两者都不可能,因为它们从来没有被设置为:new
经过一些调试,我调查一下,这里发生了一些有趣的事情:
a = {name = "aaa",x = "sss"} function a:new() o = {} print(o.x,self.x) -- nil sss setMetatable(o,self) print(o.x,self.x,o,self,self.__index,o.__index) -- nil sss table: 0x1001280 table: 0x1001320 table: 0x1001320 nil self.__index = self print(o.x,o.__index) -- sss sss table: 0x1001280 table: 0x1001320 table: 0x1001320 table: 0x1001320 return o end
注意第三次打印时,它返回self的.x值,但它是从o调用的,它与self没有“关系”,这怎么可能?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。