Ограничения типа Scala Generics

Я сейчас читаю Programming Scala. Я только что прочитал главу о неявном преобразовании типов, где вводится символ <%. Также есть символ <: и символ <.

Может ли кто-нибудь обобщить различные ограничения типов? Например, я борюсь с разницей между <: и <. Мне любопытно, есть ли другие, которые я еще не рассмотрел.


person Travis Parks    schedule 01.04.2013    source источник
comment
Возможный дубликат stackoverflow.com/ вопросов/4465948/ см. также stackoverflow.com/questions/3427345/   -  person om-nom-nom    schedule 01.04.2013
comment
@ om-nom-nom Меня не интересуют операторы, упомянутые в сообщении, которое вы указали. Я касался операторов ограничений типа: <:, <%, >: и т. д. Они совершенно не связаны между собой.   -  person Travis Parks    schedule 02.04.2013


Ответы (1)


Нет ограничения типа с именем <.

A <: B означает, что A буквально является подтипом B (где подтип определяется рефлексивно, что означает, что для любого типа T это тот случай, когда T <: T).

A <% B означает, что A является либо подтипом B, либо имеет место неявное преобразование A в отдельный тип AA, для которого AA <: B. Это называется "привязка представления".

A >: B означает, что A является супертипом B.

person Randall Schulz    schedule 01.04.2013
comment
Вы правы, ограничения < нет. Как насчет ограничения >:? - person Travis Parks; 01.04.2013
comment
Я только начал читать главу о реализации List. Это объясняет, что >: можно использовать для создания List[Fruit] при добавлении Orange к List[Apple]. Это очень интересное ограничение. - person Travis Parks; 02.04.2013
comment
Точнее: A ‹% B означает, что существует неявное преобразование из A в отдельный тип AA, для которого AA ‹: B. Если A является подтипом B, AA может быть таким же, как A: Функция идентичности (которая определяется в Predef и всегда в области действия) можно применять вместо фактического преобразования. Но даже если A является подтипом B, может иметь место неявное преобразование в другой тип AA, который имеет приоритет над Predef.identity(). В этом случае компилятор выведет тип AA. Зависит от приоритета имплицитов. - person jcsahnwaldt Reinstate Monica; 24.03.2015