【问题标题】:Will my "in?" monkey patch cause issues? [duplicate]我的“在吗?”猴子补丁导致问题? [复制]
【发布时间】:2013-09-13 09:49:48
【问题描述】:

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

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

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

def in? *scope
  scope.include? self
end

所以现在我可以这样做:

message.message_type.in? :offer, :message

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

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

【问题讨论】:

  • Rails 实际上包含具有这个确切名称的方法,.in?
  • 我看过,但从未找到过这样的东西。你能链接文档吗?
  • 修补ObjectSymbol 似乎是在自找麻烦,尤其是使用这么短的名称。
  • @tadman:activesupport 成功了。 :)

标签: ruby-on-rails ruby monkeypatching


【解决方案1】:

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。

【讨论】:

  • 我顺便赞成幸运星参考。
猜你喜欢
  • 1970-01-01
  • 2010-11-26
  • 2011-01-14
  • 2015-08-21
  • 2023-04-01
  • 1970-01-01
  • 2016-09-01
  • 2012-09-16
  • 2012-12-18
相关资源
最近更新 更多