복붙노트

[SCALA] 스칼라의 경로에 의존하는 유형은 무엇을 의미합니까?

SCALA

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

나는 스칼라 경로에 의존하는 유형이 들었습니다. 그것은 내부 - 클래스와 함께 할 수있는 뭔가하지만 무엇을이 실제로 의미와 왜 상관이야?

해결법

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

    1.내가 제일 좋아하는 예 :

    내가 제일 좋아하는 예 :

    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
    

    따라서, 좌표의 유형은 인스턴스화되는 보드의 인스턴스에 따라 달라집니다. 가치와 혼자가 종류에 따라 달라집니다 형 안전 일종의을주는이 달성 할 수있는 일의 모든 종류가 있습니다.

    이 종속 유형처럼 들릴 수도 있지만, 더 제한됩니다. 예를 들어, 점유의 종류는 보드의 값에 따라 달라집니다. C2의 유형 b2.Coordinate 때문에의 점유 형태는 [b1.Coordinate] 설정하는 동안 위, 마지막 줄은 작동하지 않습니다. 하나 B1 같은 다른 유형의 식별자를 사용할 수 있음을 유의 그래서 유형과 연관된 식별자 B1 아니다. 예를 들어, 작품을 다음과 같은 :

    val b3: b1.type = b1
    val c3 = b3.Coordinate(10, 10)
    b1.occupied += c3
    
  2. from https://stackoverflow.com/questions/2693067/what-is-meant-by-scalas-path-dependent-types by cc-by-sa and MIT license