0

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

alias_method old_name, func_name if self.respond_to? func_name

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

func_name = :get在这个片段中

4

3 回答 3

2

我在这个链接上找到了我的问题的一个很好的答案

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

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'
于 2015-05-11T17:29:59.053 回答
1

我打赌你会alias_methodSinatra::Base. 您应该在 的单例类中调用它Sinatra::Base,因为该方法get被定义为类方法。

于 2015-05-12T08:08:42.690 回答
0

语法是:

alias_method :new_name, :func_name

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

alias_method :to_s, :name
于 2015-05-11T17:10:17.203 回答