Я заметил, что tuple.productIterator
всегда возвращает Iterator[Any]
, и задался вопросом, нельзя ли установить несколько нижних границ (так что это может быть итератор самого низкого общего супертипа).
Я пробовал и искал немного, но нашел только это Вопрос по множеству оценок сверху.
Это мой тест на определение типа итератора:
def f[A,B](a:A, b:B) = List(a,b)
// return type is List[Any]
def f[A,B, T >: A "and" T >: B](a:A, b:B) = List[T](a,b)
// doesn't compile, but
// f(1, true) should give a List[AnyVal] and
// f("x", "y") a List[String]
Это ограничение JVM?
Изменить: Вот немного более крупный пример, который, похоже, не может быть решен с использованием подхода IttayD, когда T должен быть определен в методе:
class Foo[A, B](a: A, b: B) {
def f[T >: A] = List[T](a) // works
def g[T >: A "and" T >: B] = List[T](a) // doesn't work
}