我正在创建一个Lua程序,我尝试使用类似继承的东西,但是当我调用函数的超级函数时,我得到了堆栈溢出。
function Parent()
local self = {}
self.println = function(text) print(text) end
return self
end
function Child()
local super = Parent()
local this = {}
this.println = function(text)
super.println(text) -- According to the debugger, here is the problem.
print("Child")
end
for k, v in pairs(this) do
super[k] = v
end
return this
end
local a = Child()
a.println("Hello!")
我知道还有其他方法可以做到这一点,但我必须使用这种“OOP”。谁能推荐我什么?
答案 0 :(得分:1)
那个for k, v in pairs(this) do
循环对我来说似乎是倒退。
您正在将this
个函数副本推送到super
表(覆盖已存在的表)。
因此,您将this.println
推入super
,然后在其中调用super.println
,最后您会反复打电话给自己。
你的意思是反过来这样做吗?将super
个功能复制到this
?或者首先是那个循环有什么意义呢?
答案 1 :(得分:1)
你的问题在于循环使得所有println函数都是相同的println函数,它将调用重定向到另一个printnl函数,这实际上是相同的print函数,创建一个循环。
for k, v in pairs(this) do
super[k] = v
end
删除该循环将使代码工作,但我不确定这是否使其行为符合您的要求。 如果你想继承方法,也许你应该看一下lua metatables。