【问题标题】:Redefining a method [duplicate]重新定义方法[重复]
【发布时间】:2011-09-27 20:14:56
【问题描述】:

如果满足某些条件,我想重新定义库中函数的行为,否则执行原始函数。示例:

class LibraryToExtend
  def FunctionToExtend(argument)
    if argument == something
      do_something_new
    else
      do_what_the_function_did_originally
    end
  end
end

我不认为super 在这种情况下会起作用,因为我正在覆盖函数,而不是扩展它。

【问题讨论】:

标签: ruby metaprogramming


【解决方案1】:

确实super 不会工作。您需要以某种方式保留对旧方法的引用,并通过创建 alias 来做到这一点。

class LibraryToExtend
  alias :FunctionToExtend :original_function
  def FunctionToExtend(argument)
    if argument == something
      do_something_new
    else
      original_function()
    end
  end
end

作为旁注,约定是 ruby​​ 方法是小写的,下划线 (_) 不是驼峰式(但这只是我很讨厌)

【讨论】:

  • 这正是我想要的!我以前没有听说过 Ruby 中的别名。谢谢。
  • 没问题,其实我想补充的是,这是一个非常好的问题。添加了更多上下文
猜你喜欢
  • 1970-01-01
  • 2019-08-05
  • 2021-12-05
  • 2010-09-13
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多