ste*_*eve 7 ruby monkeypatching ruby-on-rails
我想update_attributes在模型类的单个实例上覆盖方法的行为.假设变量被称为@alert什么是最好的方法呢?为了清楚起见,我不想为整个类修改此方法的行为.
免责声明:
我需要这样做以强制方法false在我想要时返回,以便我可以为后面的错误处理代码编写单元测试.我知道这可能不是最好的做法.
只需在对象上定义一个方法:
class Thing
def greeting
'yo, man'
end
end
Thing.instance_methods(false)
#=> [:greeting]
object = Thing.new
#=> #<Thing:0x007fc4ba276c90>
object.greeting
#=> "yo, man"
Run Code Online (Sandbox Code Playgroud)
定义两个方法object(将是object单例类中的实例方法.
def object.greeting
'hey, dude'
end
def object.farewell
'see ya'
end
object.methods(false)
#=> [:greeting, :farewell]
object.singleton_class.instance_methods(false) #=> [:greeting, :farewell]
object.greeting
#=> "hey, dude"
object.farewell
#=> "see ya"
new_obj = Thing.new
new_obj.greeting
#=> "yo, man"
new_obj.farewell
#NoMethodError: undefined method `farewell' for #<Thing:0x007fe5a406f590>
Run Code Online (Sandbox Code Playgroud)
删除object单例方法greeting.
object.singleton_class.send(:remove_method, :greeting)
object.methods(false)
#=> [:farewell]
object.greeting
#=> "yo, man"
Run Code Online (Sandbox Code Playgroud)
:greeting从object单例类中删除的另一种方法如下.
class << object
remove_method(:greeting)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2043 次 |
| 最近记录: |