如何在Ruby中检查对象是否属于数组

3
我通常需要检查以下内容: if ['Bob','Mary','John'].include? @user.name 是否可以像这样写: if @user.name.in? ['Bob','Mary','John'] 谢谢。

你能告诉我第一行为什么不适合你吗?或者你只是想知道实现相同功能的另一种方式? - afaf12
1
我认为第一种方式不太自然(这是 Ruby 想要避免的)。 - AdamNYC
2个回答

6
Rails 3.1有这个Object.in?方法。
characters = ["Konata", "Kagami", "Tsukasa"]
"Konata".in?(characters) # => true

character = "Konata"
character.in?("Konata", "Kagami", "Tsukasa") # => true

4
如果@user.name是一个String,你可以在String后面加上in?
class String                                                                                                                                                          
  def in? a
    a.include? self
  end
end

这将产生以下效果:
irb(main):011:0> 'Bob'.in? ['Bob','Mary','John']
=> true
irb(main):012:0> 'Jane'.in? ['Bob','Mary','John']
=> false

谢谢。我原本希望Rails有一种神奇的方法可以为任何类做到这一点,但似乎并非如此。 - AdamNYC
2
@phogratos:为什么你把解决方案限制在String上?你可以将其添加到Object中。然后你就可以使用6.in?([1,2,])了。或者in?是另一个对象的一部分吗? - knut
@knut:确实,您也可以扩展Object,但是您永远无法确定in?是否在其他任何地方使用。因此,我建议将猴子补丁限制为特定的类。 - phlogratos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接