【发布时间】:2011-05-24 23:23:26
【问题描述】:
我注意到tuple.productIterator 总是返回一个Iterator[Any] 并想知道是否不能设置多个下限(因此它可能是最低通用超类型的迭代器)。
我尝试并搜索了一下,但只找到了this 多个上限的问题。
这是我对如何定义迭代器类型的测试:
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 的限制吗?
编辑: 这是一个稍微大一点的例子,当 T 应该在方法中定义时,使用 IttayD 方法似乎无法解决:
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
}
【问题讨论】:
标签: scala jvm type-systems