我正在尝试覆盖子foo()
中的A
个父B
。但不是完全覆盖它,我想只在某些条件下覆盖它。伪示例将是:
function B.foo()
if #Certain conditions# then
# Do what I want to overwrite #
else
# Do what the parent wants
end
end
我不能再把父母实现放在这里,因为我无法访问父代码。
有没有办法实现这个目标?
答案 0 :(得分:0)
我认为" B
是父级B
"您的意思是您已将A
metatable索引设置为B.foo
。因此,在您向A.foo
分配新内容之前,它会解析为B.foo
的值。只需将其保存到本地upvalue,并使用此引用调用local parent_foo = B.foo -- save current B.foo, presumably pointing to A.foo at the moment
function B.foo() -- replace it with new B.foo
if #Certain conditions# then
# Do what I want to overwrite #
else
return parent_foo()
end
end
指向的任何内容,直到您分配了新的实现。
my-video