Я слышал, что в Scala есть типы, зависящие от пути. Это как-то связано с внутренними классами, но что это на самом деле означает и почему меня это волнует?
scala
type-systems
path-dependent-type
oxbow_lakes
источник
источник
Ответы:
Мой любимый пример:
Итак, тип
Coordinate
зависит от экземпляра,Board
из которого он был создан. С его помощью можно сделать все, что угодно, обеспечивая своего рода безопасность типов, которая зависит от значений, а не только от типов.Это может показаться зависимым типом, но оно более ограничено. Например, тип
occupied
зависит от значенияBoard
. Выше последняя строка не работает, потому что типc2
-b2.Coordinate
, аoccupied
тип -Set[b1.Coordinate]
. Обратите внимание, что можно использовать другой идентификатор с тем же типомb1
, поэтому это не идентификаторb1
, связанный с типом. Например, работает следующее:источник