有没有在Lua中在某个if条件下使用父级函数的方法

我正在尝试在子级B中重写父级A的foo()。但是,我不想完全覆盖它,而是只想在某些条件下覆盖它。一个伪代码示例将是:

function B.foo()
  if #Certain conditions# then
    #执行我想要覆盖的# 
  else
    #执行父部分想要执行的# 
  end
end

我无法在此处再次放置父代实现,因为我没有访问父代代码的权限。

有没有办法实现这个?

点赞
用户936986
用户936986

我假设你所说的 "AB 的顶层父级" 意味着你已经将 B 的元表索引设为了 A。因此,在你给 B.foo 分配任何新值之前,它将解析为 A.foo 的值。只需将其保存在本地上值中,并使用此引用调用不管 B.foo 最初指向什么,直到你分配新的实现为止。

local parent_foo = B.foo -- 保存当前的 B.foo,可能当前指向 A.foo
function B.foo()         -- 用新的 B.foo 替换它
  if #某些条件# then
    # 覆盖我想要的东西 #
  else
    return parent_foo()
  end
end
2018-03-21 19:25:24