2010-12-12 6 views
1

シンプルルビー「や」コンソールで質問

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

それは@user.user_typeは二つの文字列の1つに含まれているかどうかをチェックしますので、私は最後の文を書くにはどうすればよいですか?

答えて

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

未定義のメソッドが含まれていますか? ["application/jpg"、 "application/png"]の場合私は間違って何をしていますか? – sscirrus

+4

実際、それは「含む?」です。しかし、@ sscirrus、あなたはdocsをチェックすべきです:http://ruby-doc.org/core/classes/Enumerable.html – tokland

+0

ありがとうTokland。私は適切な情報源を探していましたが、Google検索の数分でそれを見つけられませんでした。 'include?'は正しく動作します。 +1! – sscirrus

7

Enumerable#include?行くための慣用的かつ簡単な方法ですが、サイドノートとして、私はあなたに(私が想像して)Pythonのファンを満足させることは非常に些細な拡張子を表示してみましょう:

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

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

時々(ほとんどの実際には)、オブジェクトがコレクション内にあるかどうかを尋ねる意味的には、他の方法よりも適切です。今すぐあなたのコードでは、なります

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

しかし、我々プログラマは自然とても良く使用Enumerable#include?や友人による怠惰です:

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

はところで、私はあなたが書くしようとしていた何だったと思います。

+1

この答えには貴重な情報がたくさんあります。 – Dogweather