【发布时间】:2019-12-31 13:00:14
【问题描述】:
item = {y = 21}
function item:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function item:Run()
print("item running")
end
berry = item:new{x = 52}
function berry:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function berry:Run()
print("berry is running")
self.__index:Run()
end
berry:new{b = 32}:Run()
当它应该打印“berry is running”然后是“item running”时,输出会无限打印“berry is running”。如果我将self.__index 更改为self.__index.__index 甚至更改为self.__index.__index.__index,输出仍然会无限打印“berry is running”。我该如何纠正这个问题?任何帮助将不胜感激
【问题讨论】:
-
用
getmetatable(self):Run()替换self.__index:Run() -
@EgorSkriptunoff "item running" 被打印一次,但 "berry is running" 被打印两次而不是一次。如果我从 berry 创建另一个子类,这仍然有效吗?
-
我的
Run()对层次结构中的每个级别执行一次。这就是为什么有 3 条消息:来自子类、来自类berry和来自类item