Почему productIterator возвращает тип Iterator [Any]? - PullRequest
5 голосов
/ 23 декабря 2011

Почему scala Tuple productIterator возвращает тип Iterator [Any]?

Например, если Tuple3 или Product3 productIterator, следующий определению

def productIterator[T1<:X,T2<:X,T3<:X,X] = Iterator(_1,_2,_3)

следующее выражение может возвращать итератор [java.lang.Number]

(BigInt(1),new java.lang.Long(2),new java.lang.Float(3)).productIterator

Но текущая версия Scala (2.9.1) не такова.Есть ли причина для чего-то?

1 Ответ

2 голосов
/ 23 декабря 2011
% scala3 -Xexperimental 
Welcome to Scala version 2.10.0.rdev-4056-2011-12-21-g69ed0a9 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).
Type in expressions to have them evaluated.
Type :help for more information.

scala> case class Foo[T1 <: java.lang.Number, T2 <: java.lang.Number](s: T1, t: T2)
defined class Foo

scala> Foo[java.lang.Integer, java.lang.Long](5, 5L)
res1: Foo[Integer,Long] = Foo(5,5)

scala> res1.productIterator _
res2: () => Iterator[Number] = <function0>

UPDATE

Это наименьшая верхняя граница (не стираемых) типов элементов продукта. Например, в Product[T, U, V] это тот же тип, что и выражение

if (cond1) x1: T else if (cond2) x2: U else x3: V

или тип списка в

List(x1: T, x2: U, x3: V)

В ответе посмотрите на предполагаемый тип f в

def f[T] = List(null: List[T], null: Set[T], null: Iterator[T])

чтобы понять, что я имею в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...