Enumeration
특성은 유형의 멤버가 Value
열거의 개별 요소를 (실제로 내부 클래스,하지만 차이는 여기에 중요하지 않습니다) 대표를.
따라서 object WeekDay
해당 유형 멤버를 상속합니다. 라인 type WeekDay = Value
은 단지 유형 별칭 입니다. import WeekDay._
를 사용 하여 다른 곳에서 가져온 후 해당 유형을 사용할 수 있기 때문에 유용 합니다. 예 :
def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
대신 최소 버전은 다음과 같습니다.
object WeekDay extends Enumeration {
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
당신은하지 않습니다 할 의 내용을 가져올 수 object WeekDay
있지만, 당신은 유형을 사용해야합니다 WeekDay.Value
및 개인 회원을 한정. 따라서 예는
def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)
두 번째 질문은의 의미에 관한 것입니다 val Mon, ... = Value
. 의 구현을 살펴 보지 않으면 실제로 매우 혼란 스럽습니다 Enumeration
. 이것은 유형의 할당이 아닙니다! 대신 보호 호출하는 같은 이름의 방법 , Value
유형의 구체적인 인스턴스를 반환합니다 Value
.
그래서 당신이 쓸 수 발생 val a, b, c = foo
스칼라에서, 각각의 값에 대해 a
, b
그리고 c
방법은 foo
또 다시 호출됩니다. Enumeration
이 트릭을 사용하여 내부 카운터를 증가시켜 각 값이 개별적이되도록합니다.
에 대한 Scala API 문서를 열고를 Enumeration
클릭 Visibility: All
하면 해당 메서드가 나타나는 것을 볼 수 있습니다.