我正在尝试将 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]
但我怀疑为什么原来的那个不起作用。看起来如果我应用:+
在超类中定义的运算符(在这种情况下)然后它返回超类?即 ifU
是 a Vector
,foo
返回Seq
,所以我得到错误required "U" but found "Seq[T]"
。
谁能启发我为什么会看到这种行为?