2012-03-31 34 views
2

属于一个数组,我通常要检查的东西,如:如何检查对象在Ruby中

if ['Bob','Mary','John'].include? @user.name

有写类似的方式:

if @user.name.in? ['Bob','Mary','John']

谢谢您。

+0

你能告诉为什么第一线并不适合你?或者你只是想知道实现这一目标的不同方式? – afaf12 2012-03-31 13:59:58

+1

我认为第一种方式并不自然(Ruby想避免的)。 – AdamNYC 2012-03-31 14:03:13

回答

5

的Rails 3.1已经得到了这个Object.in?方法

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

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

太棒了,地板!谢谢。 – AdamNYC 2012-03-31 14:44:29

4

如果@user.nameString,您可以将in?加到String

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 
+0

谢谢。我希望Rails有一个奇迹的方法来为任何类做这个,但似乎并非如此。 – AdamNYC 2012-03-31 14:17:36

+2

@phogratos:你为什么要将你的解决方案限制为'String'?您可以将其添加到“对象”。那么你可以使用'6.in?([1,2,])'。或者是在另一个对象中? – knut 2012-03-31 14:27:26

+0

@knut:的确,你也可以扩展Object,但你永远无法确定是否在其他地方使用了in?。所以我建议限制猴子补丁到特定的类。 – phlogratos 2012-03-31 14:34:24