尝试别名旧方法并在ruby中创建新方法

时间:2015-05-11 17:08:47

标签: ruby respond-to

如果方法存在,我正在使用以下代码段仅对方法进行别名:

alias_method old_name, func_name if self.respond_to? func_name

alias_method': undefined method 'get' for class 'Sinatra::Base' (NameError)返回true时,self.respond_to? func_name如何出错?

此代码段中的

func_name = :get

3 个答案:

答案 0 :(得分:1)

我在this link

找到了一个很好的答案

而不是猴子修补原始类,而是创建一个模块,然后使用prepend,只需调用super来调用原始方法。 我现在这样做:

Sinatra::Base.prepend Restman::Patches::Sinatra_Base_Patch

模块Sinatra_Base_Patch包含覆盖原始函数的函数。

我遵循的例子是:

class Foo
  def bar
    'Hello'
  end
end 

module FooExtensions
  def bar
    super + ' World'
  end
end

class Foo
  prepend FooExtensions # the only change to above: prepend instead of include
end

Foo.new.bar # => 'Hello World'

答案 1 :(得分:1)

我打赌你在alias_method的范围内致电Sinatra::Base。你应该在Sinatra::Base单例类中调用它,因为方法get被定义为类方法。

答案 2 :(得分:0)

语法为:

alias_method :new_name, :func_name

例如,您在记录中有一个名称属性:

alias_method :to_s, :name