Programming

스칼라 열거 이해

procodes 2020. 7. 14. 21:24
반응형

스칼라 열거 이해


스칼라 열거 클래스를 이해하지 못한다고 말해야합니다. 문서에서 예제를 복사하여 붙여 넣을 수는 있지만 무슨 일이 일어나고 있는지 전혀 알 수 없습니다.

object WeekDay extends Enumeration {
  type WeekDay = Value
  val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
import WeekDay._
  • 무슨 뜻 type WeekDay = Value이고 왜 써야합니까?
  • 왜 그렇 val Mon = Value습니까? 그게 무슨 뜻입니까?
  • WeekDay객체 를 가져와야 합니까? 과,
  • 내가 쓸 때 val day = WeekDay.Mon왜 타입 WeekDay.Value이 아닌 타입 WeekDay인가?

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, bc대해 메소드 foo가 반복해서 호출됩니다. Enumeration이 트릭을 사용하여 각 카운터가 증가하도록 내부 카운터를 증가시킵니다.

Scala API 문서를 열고를 Enumeration클릭 Visibility: All하면 해당 메소드가 나타납니다.

참고 URL : https://stackoverflow.com/questions/11067396/understanding-scala-enumerations

반응형