IT

스칼라의 경로 의존형은 무엇을 의미합니까?

lottoking 2020. 7. 19. 09:05
반응형

스칼라의 경로 의존형은 무엇을 의미합니까?


스칼라에는 경로 의존적 유형이 있습니다. 내부 클래스와 관련된 것이 무엇을 의미하며 왜 관심이 있습니까?


내가 가장 좋아하는 예 :

case class Board(length: Int, height: Int) {
  case class Coordinate(x: Int, y: Int) { 
    require(0 <= x && x < length && 0 <= y && y < height) 
  }
  val occupied = scala.collection.mutable.Set[Coordinate]()
}

val b1 = Board(20, 20)
val b2 = Board(30, 30)
val c1 = b1.Coordinate(15, 15)
val c2 = b2.Coordinate(25, 25)
b1.occupied += c1
b2.occupied += c2
// Next line doesn't compile
b1.occupied += c2

따라서 유형 은 인스턴스화 Coordinate한 인스턴스에 따라 달라집니다 Board. 이것으로 달성 할 수있는 모든 종류의 것들이 유형만이 아닌 값에 의존하는 금지 유형 안전을 제공합니다.

즉각 유형처럼 들릴 수 있다고 더 제한적입니다. 예를 들어의 유형은 occupied의 값에 따라 달라집니다 Board. 의 유형이 있기 때문에 위, 마지막 줄이없는 작업을 수행 c2입니다 b2.Coordinate동안 occupied유형입니다 Set[b1.Coordinate]. 같은 유형의 다른 식별자를 사용할 수 b1있으므로 해당 형식과 사용할 식별자 가 아닙니다 b1. 예를 들어 다음이 작동합니다.

val b3: b1.type = b1
val c3 = b3.Coordinate(10, 10)
b1.occupied += c3

참고 URL : https://stackoverflow.com/questions/2693067/what-is-meant-by-scalas-path-dependent-types

반응형