如果方法存在,我正在使用以下代码段仅对方法进行别名:
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
答案 0 :(得分:1)
而不是猴子修补原始类,而是创建一个模块,然后使用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