如果方法存在,我将使用以下代码段仅对方法进行别名:
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
在这个片段中
如果方法存在,我将使用以下代码段仅对方法进行别名:
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
在这个片段中
我在这个链接上找到了我的问题的一个很好的答案
我不是猴子修补原始类,而是创建一个模块,然后使用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'
我打赌你会alias_method
在Sinatra::Base
. 您应该在 的单例类中调用它Sinatra::Base
,因为该方法get
被定义为类方法。
语法是:
alias_method :new_name, :func_name
例如,您在记录中有一个 name 属性:
alias_method :to_s, :name