반응형
스칼라의 경로 의존형은 무엇을 의미합니까?
스칼라에는 경로 의존적 유형이 있습니다. 내부 클래스와 관련된 것이 무엇을 의미하며 왜 관심이 있습니까?
내가 가장 좋아하는 예 :
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
반응형
'IT' 카테고리의 다른 글
언제 std :: thread :: detach를 쓰고 있습니까? (0) | 2020.07.19 |
---|---|
Google Finance API를 사용하여 주식 시세를 시내에서 어떻게해야합니까? (0) | 2020.07.19 |
macOS에서 Visual Studio를 사용할 수 있습니까? (0) | 2020.07.19 |
"blah"가 유지 ConfigurationManager.AppSettings [ "blah"]에서 예외가 발생합니까? (0) | 2020.07.19 |
`: key => "value"`와`key : "value"`해시 표기법 사이에 있습니까? (0) | 2020.07.19 |