函数调用中的神秘stackoverflow?
Mysterious stackoverflow in function call?
我正在创建一个 Lua 程序,我尝试使用继承之类的东西,但是当我调用函数的 super 时出现堆栈溢出。
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"。谁能推荐我什么?
for k, v in pairs(this) do
循环对我来说似乎是倒退的。
您正在将函数的 this
副本推送到 super
table(覆盖已经存在的那些)。
所以你将 this.println
推入 super
,然后在其中调用 super.println
,最后你会反复调用自己。
您的意思是相反吗?将 super
函数复制到 this
?或者这个循环最初的意义是什么?
您的问题在于使所有 println 函数成为同一个 println 函数的循环,该函数将调用重定向到另一个 printnl 函数,这实际上是同一个 print 函数,从而创建了一个循环。
for k, v in pairs(this) do
super[k] = v
end
删除该循环将使代码正常工作,但我不确定这是否会使它按您想要的方式运行。
如果你想继承方法,也许你应该看看 lua 元表。
我正在创建一个 Lua 程序,我尝试使用继承之类的东西,但是当我调用函数的 super 时出现堆栈溢出。
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"。谁能推荐我什么?
for k, v in pairs(this) do
循环对我来说似乎是倒退的。
您正在将函数的 this
副本推送到 super
table(覆盖已经存在的那些)。
所以你将 this.println
推入 super
,然后在其中调用 super.println
,最后你会反复调用自己。
您的意思是相反吗?将 super
函数复制到 this
?或者这个循环最初的意义是什么?
您的问题在于使所有 println 函数成为同一个 println 函数的循环,该函数将调用重定向到另一个 printnl 函数,这实际上是同一个 print 函数,从而创建了一个循环。
for k, v in pairs(this) do
super[k] = v
end
删除该循环将使代码正常工作,但我不确定这是否会使它按您想要的方式运行。 如果你想继承方法,也许你应该看看 lua 元表。