2010-12-12 6 views
1

Dans la console:simple Ruby « ou » question

@user.user_type = "hello" 
@user.user_type == "hello" 
    true 
@user.user_type == ("hello" || "goodbye") 
    false 

Comment puis-je écrire la dernière déclaration de sorte qu'il vérifie si @user.user_type est contenu dans l'une des deux chaînes?

Répondre

8
["hello", "goodbye"].include? @user.user_type 
+0

Je reçois une méthode non définie comprend? pour ["application/jpg", "application/png"]. Qu'est-ce que je fais mal? – sscirrus

+4

En fait, c'est "include?". Mais @sscirrus, vous devriez vérifier les docs: http://ruby-doc.org/core/classes/Enumerable.html – tokland

+0

Merci beaucoup Tokland. Je cherchais la bonne source mais quelques minutes de googling ne l'ont pas trouvé. 'include?' fonctionne correctement. +1! – sscirrus

7

Enumerable#include? est la voie idiomatiques et simple d'aller, mais comme une note de côté laissez-moi vous montrer une extension très trivial que (je pense) plaira aux amateurs Python:

class Object 
    def in?(enumerable) 
    enumerable.include?(self) 
    end 
end 

2.in? [1, 2, 3] # true 
"bye".in? ["hello", "world"] # false 

Parfois (plus de l'époque, en fait) il est sémantiquement plus approprié de demander si un objet est à l'intérieur d'une collection que l'inverse. Maintenant, votre code regarderait:

@user.user_type.in? ["hello", "goodbye"] 

BTW, je pense que ce que vous essayez d'écrire était:

@user.user_type == "hello" || @user.user_type == "goodbye" 

Mais nous les programmeurs sont paresseux par nature, afin d'utiliser mieux Enumerable#include? et les amis.

+1

Génial. Beaucoup d'informations précieuses dans cette réponse. – Dogweather