我的“在吗?”猴子补丁导致问题?

时间:2013-09-09 20:06:36

标签: ruby-on-rails ruby monkeypatching

所以我遇到的一个相当常见的模式是这样的:

[:offer, :message].include? message.message_type

那里的措辞倒置让我心烦意乱。所以我特意为Symbol编写了这个小猴子补丁。

def in? *scope
  scope.include? self
end

所以现在我可以这样做了:

message.message_type.in? :offer, :message

这很好用,我很满意,但偶尔我需要其他对象的类似功能。 Rails应用程序中的模型对象是最常见的情况,偶尔会出现字符串等等。

如果我将这个问题直接修补到Object

,我会遇到什么样的问题?

1 个答案:

答案 0 :(得分:2)

Rails(ActiveSupport)已经使用此方法修补了Object。以下是文档:http://api.rubyonrails.org/classes/Object.html#method-i-in-3F

  

如果参数中包含此对象,则返回true。参数必须是响应#include?的任何对象。用法:

characters = ["Konata", "Kagami", "Tsukasa"]
"Konata".in?(characters) # => true    
  

如果参数没有响应#include?这会抛出ArgumentError。