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

Trying to alias old method and create new one in ruby

我使用以下代码片段仅在方法存在时为该方法添加别名:

alias_method old_name, func_name if self.respond_to? func_name

self.respond_to? func_name returns 为真时,alias_method': undefined method 'get' for class 'Sinatra::Base' (NameError) 怎么会出错?

func_name = :get 在此片段中

语法是:

alias_method :new_name, :func_name

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

alias_method :to_s, :name

我在 this link

找到了很好的问题答案

我没有对原始 class 进行猴子修补,而是创建了一个模块,然后使用 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'

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