1

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

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

那里的措辞倒置让我很困惑。所以我Symbol专门写了这个小猴子补丁。

def in? *scope
  scope.include? self
end

所以现在我可以这样做:

message.message_type.in? :offer, :message

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

如果我直接将它修补到 monkey 中,我会遇到什么样的问题Object

4

1 回答 1

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。

于 2013-09-09T20:15:15.070 回答