Scala将丢失参数的泛型类型

Scala将丢失参数的泛型类型,scala,types,covariance,Scala,Types,Covariance,在我的头脑中,处理遗传特征的重写函数中使用的复杂协变类型。基本问题是,[?]类型是什么?我找不到一个好的定义(这有点难以理解),因此不清楚为什么在下面的示例中,[t]会被[?]取代: > sealed trait Bar[+T] > trait FooT { type Other; def foo[T,V](stuff:Bar[T]*) { stuff.headOption.isDefined } } > trait TooF extends FooT { override d

在我的头脑中,处理遗传特征的重写函数中使用的复杂协变类型。基本问题是,
[?]
类型是什么?我找不到一个好的定义(这有点难以理解),因此不清楚为什么在下面的示例中,
[t]
会被
[?]
取代:

> sealed trait Bar[+T]
> trait FooT { type Other; def foo[T,V](stuff:Bar[T]*) { stuff.headOption.isDefined } }
> trait TooF extends FooT { override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff) } }
<console>:7: error: type mismatch;
found   : Bar[T]*
required: Bar[?]
   trait TooF extends FooT { override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff) } }
>密封特征条[+T]
>trait FooT{type Other;def foo[T,V](stuff:Bar[T]*){stuff.headOption.isDefined}
>trait-TooF扩展了FooT{override-def-foo[T,V](stuff:Bar[T]*){super.foo(stuff)}
:7:错误:类型不匹配;
发现:Bar[T]*
必需:条[?]
trait-TooF扩展了FooT{override-def-foo[T,V](stuff:Bar[T]*){super.foo(stuff)}

我不确定它显示
条[?]
的确切原因,但我认为可能是类型参数尚未解决。真正的问题是将varargs传递给super方法的语法不正确。应该是

override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff:_*) }

我不确定它显示
Bar[?]
的确切原因,但我认为可能是类型参数尚未解决。真正的问题是将varargs传递给super方法的语法不正确。应该是

override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff:_*) }

是的,没错,谢谢!被前景错误弄糊涂了,无法识别背景问题。那么错误消息是完全向后的吗?不,错误消息是正确的。您已经传递了一个
Bar[T]*
,该方法希望每个参数都只是一个
Bar[?]
。请注意找到的类型中的
*
,它很重要。是的,这是正确的,谢谢!被前景错误弄糊涂了,无法识别背景问题。那么错误消息是完全向后的吗?不,错误消息是正确的。您已经传递了一个
Bar[T]*
,该方法希望每个参数都只是一个
Bar[?]
。请注意找到的类型中的
*
,它是重要的。