0

継承されたトレイトのオーバーライドされた関数で使用されるトリッキーな共変型を処理するのに頭がいっぱいです。基本的な質問は、[?]型は何ですか? 適切な定義が見つからない (ちょっとググれない) ため、次の例でa[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) } }
4

1 に答える 1

3

それが示す正確な理由はわかりませんが、Bar[?]おそらく型パラメーターのようなものがまだ解決されていないと思います。本当の問題は、可変引数をスーパー メソッドに渡すための構文が正しくないことです。そのはず

override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff:_*) }
于 2012-05-14T16:51:09.357 に答える