ООП потиху закапывают
http://avva.livejournal.com/2581700.html
Все, что было полезного в ООП, унесли в другие парадигмы (если оно раньше еще оттуда не было заимствовано), остальное решили закопать :)
Все, что было полезного в ООП, унесли в другие парадигмы (если оно раньше еще оттуда не было заимствовано), остальное решили закопать :)
no subject
no subject
здесь просто очень важно, что контейнер - первоклассная сущность (т.е. его можно передавать в функции, возвращать из функций, можно делать if (blah) module1 else module2). обычная коннотация слова "неймспейс" это что-то второсортное вроде пакета в жабе или неймспейса в шарпе или плюсах, а это начисто убивает всю соль задумки.
в чем собственно задумка? это описано по ссылкам в родительском каменте: http://metaclass.livejournal.com/788219.html?thread=16796923#t16796923
no subject
no subject
Лучшие погонщики индусов приказывают в этом случае создавать и явно ссылаться на внутренние классы только внутри их контейнеров, где имя короткое. А снаружи за нас вывод типов пусть думает.
no subject
no subject
no subject
По идее, в параметрах методов могут быть такие проблемы, но методы либо живут там же где и типы, либо работают с супертипами вроде общих трейтов (и живут в этих же трейтах).
Т.е. вариант "модуль А ссылается на глубоко внутренние типы модуля B по полному пути" - это скорее всего, плохо разложили код по модулям, такого в норме быть не должно.
no subject
no subject
no subject
Но "извне" это растяжимое понятие. В Скале есть способ собирать большие модули из небольших кусочков. При этом каждый из кусочков, несмотря на то, что определен отдельно от других (возможно, даже в другом пакете), логически находится в одной песочнице вместе со своими зависимостями (называется cake pattern). Как следствие, для значительной части кода ада вложенности не существует. Т.е. будет не class Foo { Bar.baz }, а class Foo { self: Bar => baz }.
Вы спросите, чем же это отличается от обычных неймспейсов и не-вложенных классов. Тем, что модули в Скале в отличие от пакетов в Джаве являются первоклассными сущностями, т.е. их можно передавать в методы, у них есть контракты, ими можно параметризировать код.
no subject
no subject
Все определения из PartX можно использовать в любом PartY без квалификатора. Чтобы использовать определения из NestedModule, нужно или юзать квалификатор, или написать import NestedModule._.
no subject
Одно хочу сказать - лично я после перехода с сишарпа на скалу стал писать гораздо меньше импортов.
(no subject)
(no subject)
(no subject)
no subject
no subject
(no subject)
(no subject)
(no subject)