2017-05-17 6 views
0

文字列の列挙型で文字列を検索するにはどうすればよいですか?文字列の列挙体を検索する

object FilterByDimensions extends Enumeration { 
    type FilterByDimensions = String 
    val Instance = "Instance" 
    val Platform = "Platform" 
    val Region = "Region" 

    def isSupported(s: String) = 
    FilterByDimensions.values.exists(_.toString.equalsIgnoreCase(s)) 
} 

この方法は機能しません。これも試しました。

def isSupported(s: String) = 
    FilterByDimensions.values.exists(_.equalsIgnoreCase(s)) 
+0

これは、Enumerationの使用を主張する場合、Enumerationを使用する方法ではありません。 http://www.scala-lang.org/api/current/scala/Enumeration.html –

+0

列挙型には多くの選択肢があります。私は、この記事で長所と短所をまとめた記事を書いています。多分、一般的な考え方を得るのに役立ちます:http://pedrorijo.com/blog/scala-enums/ – pedrorijo91

+0

(そしてフォローアップ:http:// pedrorijo.com/blog/scala-enums-part2/) – pedrorijo91

答えて

1

以下のようにあなたはそれを呼び出すことができます。

scala> object X extends Enumeration { val Y = Value } 
defined object X 

scala> def f(s: String) = util.Try(X.withName(s)) match { case util.Success(X.Y) => "ok" case _ => "nope" } 
f: (s: String)String 

scala> f("Y") 
res0: String = ok 

scala> f("Z") 
res1: String = nope 

「doesnの人々の要求は、名前と名前でルックアップで一致している二つの小さな機能スローする。

+0

私は実際にパターンマッチングのためにenumの値を使用しようとしています。 フィルタ一致あなたは完全なコードを表示する必要が –

+0

{ 場合FilterByDimensions.Instance //は何か ケースFilterByDimensions.Platformが //何か他 をしますか}。フィルタとは何ですか? enum値のマッチングを示すスニペットを参照してください。 –

+0

実際に、それは働いた。どうもありがとう。ただ一つの質問。これは文字列の列挙型を照合する標準的な方法ですか? –

1

私はあなたが文字列のFilterByDimensionenumに存在するかどうかを確認したいあなたの質問を理解していれば、あなたのFilterByDimension

object FilterByDimensions extends Enumeration { 
    type FilterByDimensions = String 
    val Instance = Value("Instance") 
    val Platform = Value("Platform") 
    val Region = Value("Region") 

    import scala.util.control.Breaks._ 
    def isSupported(s: String) = { 
    var exists = false 
    breakable { 
     for(value <- FilterByDimensions.values){ 
     exists = s.equalsIgnoreCase(FilterByDimensions(value.id).toString) 
     if(exists){ 
     break 
     } 
    } 
    } 
    exists 
    } 
} 

は、パターンマッチングに
を編集以下のようにする必要があり、そのをより良い使用するcase class

case class FilterByDimensions(value: String) 

object FilterByDimensions { 
    object Instance extends FilterByDimensions("Instance") 
    object Platform extends FilterByDimensions("Platform") 
    object Region extends FilterByDimensions("Region") 

    val values = Seq(Instance, Platform, Region) 
} 

そしてたぶんあなたが探している

val ins = "Instance" 
    ins match { 
     case FilterByDimensions.Instance.value => println("instance match") 
     case FilterByDimensions.Instance.value => println("progressing") 
     case FilterByDimensions.Instance.value => println("region match") 
     case _ => println("doesn't match") 
    } 
+0

これをパターンマッチングに使用することはできません。 例、 ケースFilterByDimensions.Instance ---->型不一致エラーが発生する –

+0

@NithinChandy、私の答えを更新しました。何かが必要なら私に連絡してください –