【发布时间】:2017-06-29 18:13:59
【问题描述】:
(斯卡拉 2.11.8)
考虑以下代码:
trait Class[A] {
def f1[B >: A](arg1: Int)(ord: Ordering[B]): Int
def f2[B >: A](arg1: Int, ord: Ordering[B]): Int
def f[B >: A](ord: Ordering[B]): Int = {
f1(123)(ord) // Compilation error!
f2(123, ord) // OK
}
}
在此,f1(123)(ord) 行引发type mismatch; found : Ordering[B] required: Ordering[A] Note: B >: A, but trait Ordering is invariant in type T. You may wish to investigate a wildcard type such as _ >: A. (SLS 3.2.10)
如果我们将调用更改为f1[B](123)(ord),错误就会消失。
为什么存在多个参数列表会使类型检查器感到困惑?这是一个错误,还是预期的结果?
【问题讨论】:
标签: scala type-inference typechecking