Ruby:检查是否在别名之前定义了方法

时间:2012-05-20 21:14:20

标签: ruby

class Test

  def my_print
    p "Print something"
  end
end

class Test

  alias_method :old_print, :my_print
  def my_print
    old_print
    p "Print some more"
  end
end

我原来的Test类位于顶部。然后我决定添加更多内容,但我决定使用别名。

但是假设my_print已经定义了。是否有一种简短的方法来检查我是否已经定义了一个别名的方法?

4 个答案:

答案 0 :(得分:4)

怎么样

if Test.method_defined? :my_print
    alias_method :old_print, :my_print
end

答案 1 :(得分:2)

因为“my_print”不是类方法,而是实例方法,你应该:

if Mod.instance_methods.include? "my_print"
  alias_method :old_print, :my_print
end

答案 2 :(得分:0)

if method(:my_print) alias_method :old_print, :my_print end

答案 3 :(得分:0)

使用defined?方法。

您可以使用defined?方法查看是否已在当前上下文/范围内定义了方法:

alias_method( :old_print, :my_print ) if defined?( my_print )