Почему в Scala есть пути-зависимые типы?
Я проводил некоторые исследования по типам, зависящим от пути. Лучшее описание, которое я мог найти для этого, было:
Если L является меткой типа, то xL и yL имеют одинаковый тип, если x и y могут быть показаны для ссылки на один и тот же объект.
Это иногда не поведение подтипа, которое можно было бы ожидать. Я ожидаю, что если L в приведенном выше примере действительно будет идентичным, то этого будет достаточно, чтобы сделать xL и yL идентичными.
Есть ли какая-то особая причина, по которой Scala был разработан таким образом?
3 ответа
В документе " Масштабируемые абстракции компонентов" есть хорошее объяснение зависимых от пути типов, а также хороший пример в разделе 3: "Пример: субъект / наблюдатель".
Эта статья хорошо объясняет это. По сути, они используются для поддержки программирования и модуляции на основе абстрактных типов данных.
Думайте о L как о аргументе типа обобщенного класса. Scala гордится своими типами-членами, но базовая JVM по-прежнему имеет те же ограничения.