Почему в Scala есть пути-зависимые типы?

Я проводил некоторые исследования по типам, зависящим от пути. Лучшее описание, которое я мог найти для этого, было:

Если L является меткой типа, то xL и yL имеют одинаковый тип, если x и y могут быть показаны для ссылки на один и тот же объект.

Это иногда не поведение подтипа, которое можно было бы ожидать. Я ожидаю, что если L в приведенном выше примере действительно будет идентичным, то этого будет достаточно, чтобы сделать xL и yL идентичными.

Есть ли какая-то особая причина, по которой Scala был разработан таким образом?

3 ответа

Решение

В документе " Масштабируемые абстракции компонентов" есть хорошее объяснение зависимых от пути типов, а также хороший пример в разделе 3: "Пример: субъект / наблюдатель".

Эта статья хорошо объясняет это. По сути, они используются для поддержки программирования и модуляции на основе абстрактных типов данных.

Думайте о L как о аргументе типа обобщенного класса. Scala гордится своими типами-членами, но базовая JVM по-прежнему имеет те же ограничения.

Другие вопросы по тегам