重新定义方法

时间:2011-07-04 01:58:10

标签: ruby metaprogramming

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

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

我不认为super会在这个实例中起作用,因为我正在覆盖该函数,而不是扩展它。

1 个答案:

答案 0 :(得分:3)

确实super不会工作。您需要以某种方式保留对旧方法的引用,并通过创建alias来完成此操作。

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

作为旁注,惯例是ruby方法是低位的,而下划线(_)不是camelcase(但这只是我的讨厌)