Защо Scala има зависещи от пътя типове?

Правих някои изследвания на типове, зависими от пътя. Най-доброто описание, което можах да намеря за него, беше:

Ако L е етикет на тип, тогава x.L и y.L са един и същ тип, ако може да се покаже, че x и y се отнасят за един и същ обект.

Това понякога не е поведението на подтипиране, което човек би очаквал. Бих очаквал, че ако L в горния пример наистина е идентичен, тогава това ще е достатъчно, за да направи x.L и y.L идентични.

Има ли някаква конкретна причина Scala да е проектирана по този начин?


person keiter    schedule 07.04.2011    source източник


Отговори (3)


Документът Абстракции на мащабируеми компоненти има добро обяснение на зависимите от пътя типове и също добър пример в раздел 3: „Казус: субект/наблюдател“.

person michid    schedule 07.04.2011

Този документ го обяснява добре. По принцип те се използват за поддръжка на базирано на абстрактен тип данни програмиране и модулиране.

person axel22    schedule 07.04.2011
comment
CMIIW, но този документ изглежда няма абсолютно нищо общо със зависещите от пътя типове. - person Trevor Robinson; 07.10.2011
comment
Вярно - това трябва да е свързано с документа за абстракции на мащабируеми компоненти. - person axel22; 10.10.2011

Мислете за L като за аргумент тип на общ клас. Scala се хвали със своите типови членове, но основната JVM все още има същите ограничения.

person Basilevs    schedule 07.04.2011