这个问题的模块,我在写作出现,但我已经表现出相同的行为一个最小的情况下。
class Minimal[T](x : T) {
def doSomething = x
}
object Sugar {
type S[T] = { def doSomething : T }
def apply[T, X <: S[T]] (x: X) = x.doSomething
}
object Error {
val a = new Minimal(4)
Sugar(a) // error: inferred [Nothing, Minimal[Int]] does not fit the bounds of apply
Sugar[Int, Minimal[Int]](a) // works as expected
}
问题是,编译器设法找出内部参数Minimal
( Int
),但随后设置的其他发生T
到Nothing
,这显然不符合apply
。 这些是绝对相同的T
,去掉了第一个参数使第二抱怨T没有限定。
有一些不确定性,这意味着编译器不能推断第一个参数,或者这是一个错误? 我可以解决这个优雅?
进一步的信息:该代码在语法糖的尝试的一个简单的例子。 原来的代码试图让|(a)|
平均模量a
,其中a是一个矢量。 显然|(a)|
比写更好|[Float,Vector3[Float]](a)|
,但遗憾的是我不能使用unary_|
使它更容易些。
实际的错误:
推断出的类型的参数[没什么,最小[INT]]不符合方法应用的类型参数界限[T,X <:Sugar.S [T]]