所以我遇到的一个相当常见的模式是这样的:
[:offer, :message].include? message.message_type
那里的措辞倒置让我心烦意乱。所以我特意为Symbol
编写了这个小猴子补丁。
def in? *scope
scope.include? self
end
所以现在我可以这样做了:
message.message_type.in? :offer, :message
这很好用,我很满意,但偶尔我需要其他对象的类似功能。 Rails应用程序中的模型对象是最常见的情况,偶尔会出现字符串等等。
如果我将这个问题直接修补到Object
?
答案 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。