y を x に追加できるものに変換しようとしています。ここで、x はある種のシーケンスです。
scala> def foo[U <: Seq[T], T](x: U, y: T): U = x :+ y
<console>:7: error: type mismatch;
found : Seq[T]
required: U
def foo[U <: Seq[T], T](x: U, y: T): U = x :+ y
^
次の解決策があります。
def foo[T]( x : Seq[T], y:T) = x :+ y
def foo[T]( x : Seq[T], y:T) : Seq[T] = x :+ y
def foo[U <: Seq[T], T](x: U, y: T): U = (x :+ y).asInstanceOf[U]
しかし、私の疑問は、元のものが機能しなかった理由です。:+
スーパークラスで定義された演算子(この場合)を適用すると、スーパークラスが返されるように見えますか?つまり、がU
返されるので、エラーが発生します。Vector
foo
Seq
required "U" but found "Seq[T]"
この動作が見られる理由を教えてもらえますか?