scala类型推断失败混乱

时间:2017-03-13 19:58:55

标签: scala type-inference type-systems

在与Scala合作很长一段时间之后,我认为我已经弄清楚所有关于类型推断的内容,但显然没有。我无法理解为什么编译器无法推断出下面案例的类型:

trait LowLevel[A]

trait HighLevel[L <: LowLevel[A],A]

class LowLevelImpl extends LowLevel[Int]

class HighLevelImpl extends HighLevel[LowLevelImpl,Int]

def method[H <: HighLevel[L,A],L <: LowLevel[A],A](t: H): H = t

val t1 = method(new HighLevelImpl) //type inference fails. won't compile with error: 
//Error:(22, 15) inferred type arguments [A$A126.this.HighLevelImpl,Nothing,Nothing] 
//do not conform to method method's type parameter bounds 
//[I <: A$A126.this.HighLevel[T,C],T <: A$A126.this.LowLevel[C],C]
//lazy val t1 = method(new HighLevelImpl);}
//         ^
val t2 = method[HighLevelImpl,LowLevelImpl,Int](new HighLevelImpl) //works fine.

在调用方法时我必须指定所有类型似乎是不必要的。我的意思是,在将HighLevelImpl实例作为参数传递之后,并不是在3种类型中的任何一种中都有任何选择吗?我错过了什么?

0 个答案:

没有答案