2017-02-08 10 views
1

私はScalaを初めて使用しています。私は以下のコード内の値と価値の違いを理解する助けてください:Scala列挙型の値と値の差

object CardsEnum extends Enumeration{ 

type CardsEnum = Value 
val spades = Value("♠") 
val diamonds = Value("♦") 
val hearts = Value("♥") 
val clubs = Value("♣") 
def isRed(c:CardsEnum.Value) = c==hearts || c==diamonds 
} 

object NewCardsEnum extends App{ 
import CardsEnum._ 

CardsEnum.values foreach println 

println(for (e <- CardsEnum.values) yield (e,isRed(e))) 

} 
+1

はタイプ値があり、メソッドの値を、それらを作成するには、メソッドの値を収集するために、それら。しかし、誰もが新しいユーザーとしてそれを並べ替える気にしないと言うでしょう。 Scalaの古いEnumerationを使用しない理由については疑問があります。 –

答えて

3

これは単なるタイプの別名である:それはそれは単にいつものようにCardsEnum使用する、必須ではありません

type CardsEnum = Value 

タイプ:代わりにCardsEnum.Valueを記述することの

import CardsEnum._ 

def func(e: CardsEnum) = ... 

def func(e: CardsEnum.Value) = ... 

この行は、メソッド呼び出しValueの結果とspadesという名前の新しい変数を宣言します。

val spades = Value("♠") 

名前("♠")で新しいオブジェクトを作成し、あなたの列挙に追加Value("♠")方法を。引数として指定した名前は、toStringメソッドで使用されます。あなたの列挙に追加

すべての値は、これが♠ ♦ ♥ ♣を印刷することを意味し.valuesコレクション、である:

CardsEnum.values foreach println