복붙노트

[SCALA] 이해 스칼라 열거

SCALA

이해 스칼라 열거

나는 스칼라 열거 클래스를 이해하지 못하는 말을해야합니다. 나는-복사 붙여 넣기 문서에서 예를 들어,하지만 난에 무슨 일이 일어나고 있는지 아무 생각이 없습니다.

object WeekDay extends Enumeration {
  type WeekDay = Value
  val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
import WeekDay._

해결법

  1. ==============================

    1.열거의 개별 요소를 나타내는 유형의 멤버 값이 특성 열거 (실제로 내부 클래스,하지만 차이는 여기에 중요하지 않습니다).

    열거의 개별 요소를 나타내는 유형의 멤버 값이 특성 열거 (실제로 내부 클래스,하지만 차이는 여기에 중요하지 않습니다).

    따라서 평일은 상속 형 부재 그 반대. 선 유형 평일은 = 값은 유형의 별명입니다. 당신이 수입 WeekDay._와 다른 곳에서 가져온 후, 당신은 예컨대 유형을 사용할 수 있기 때문에 유용합니다 :

    def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
    

    대신, 최소한의 버전은 다음과 같습니다

    object WeekDay extends Enumeration {
      val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
    }
    

    당신은 객체 평일의 내용을 가져올 필요는 없지만, 당신은 사용 유형 WeekDay.Value에 필요하고 개인 회원 자격을. 예제가 될 것입니다 그래서

    def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)
    

    두 번째 질문은 발 월 ... = 값의 의미에 관한 것입니다. 당신이 열거의 구현에 보이지 않는 경우에 참으로 매우 혼란. 이 유형의 할당되지 않습니다! 대신 유형 가치의 구체적인 인스턴스를 반환 동일한 이름, 값의 보호 메소드를 호출한다.

    그래서 당신은 스칼라에 발 A, B, C = foo는 쓸 수 있는지 발생하고, 각 값 a, 메소드 foo를 다시하고 다시 호출됩니다 B 및 C. 열거 각 값은 개별되도록 내부 카운터를 증가하기 위해 트릭을 사용한다.

    당신이 열거의 스칼라 API 문서를 열고 가시성을 클릭하면 모든를, 당신은 그 메소드가 나타나는 볼 수 있습니다.

  2. from https://stackoverflow.com/questions/11067396/understanding-scala-enumerations by cc-by-sa and MIT license