Это опечатка в спецификации языка Scala для параметризованных типов?
Разве U_i не должно быть скорее T_i, как показано на рисунке ниже?
Та же опечатка (ИМХО) тоже здесь.
Если это не опечатка, то может кто-нибудь сказать, где указано значение T_i?
1 ответ
Это не опечатка, просто очень плохой выбор переменных и путаница в области их привязки:)
В первом абзаце от "Параметризованного" до "a_n." Привязка переменных U_i относится к параметрам типа, в то время как T привязывается к фактическому параметрическому типу. Например, скажем, у вас было
val x : Map[Int, String]
Ваш T будет Map, ваш U_1 будет In t, а U_2 будет String.
Второй абзац, с другой стороны, совершенно не связан с предыдущим. Здесь параметры типа связаны с переменными T_1 ... T_n, параметрический тип НЕ привязан ни к чему, и у вас есть привязка L_1 ... L_n к нижним границам параметров типа и привязка U_1 ... U_n до верхних границ ваших типов параметров.
В этом случае, если бы вы получили (это не компилируется, это только для примера):
val x : Map[T1 <: AnyRef, T2 >: Int]
Тогда у вас будет T1, T2 в качестве фактического параметра типа, U1 = AnyRef, L2 = Int.
Надеюсь, теперь стало понятнее:) (да, плохой выбор переменных)
Чтобы увидеть, поняли ли вы, попробуйте угадать, что такое U2 и L1 во втором примере. Подсказка: посмотрите на иерархию типов Scala;)