2017-02-08 10 views
1

Я новичок в Scala. Пожалуйста, помогите мне понять разницу между значениями и значение в коде ниже:Разница между значениями и значением в Scala Enumeration

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

Существует тип Value, метод Value, чтобы создать их, и через значения метод сбора их. Но все скажут, что не утруждайте себя тем, чтобы разбираться в этом как новый пользователь. Есть вопросы о том, почему бы не использовать старое перечисление Scala. –

ответ

3

Это просто тип псевдоним:

type CardsEnum = Value 

Это не является обязательным, он просто всегда вам использовать CardsEnum как Тип:

import CardsEnum._ 

def func(e: CardsEnum) = ... 

Вместо того, чтобы написать CardsEnum.Value:

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

Эта строка объявляет новую переменную с именем spades с результатом вызова метода Value:

val spades = Value("♠") 

Метод Value("♠") создает новый объект с именем ("♠") и добавляет его в перечислении. Имя, которое вы предоставили в качестве аргумента, используется методом toString.

Все значения, добавленные к вашему перечислению находятся в .values коллекции, а это значит, что это будет печатать ♠ ♦ ♥ ♣:

CardsEnum.values foreach println