假设我有一个包装类
case class Cont [E] (e : Seq[E]) {
def :: [E1 >: E] (e1 : Seq[E1]) : Cont[E1] = Cont(e1 ++ e)
def + [E1 >: E] (e1 : Seq[E1]) : Cont[E1] = Cont(e1 ++ e)
}
它是某种类型序列的包装器。它现在可以接受另一种类型的序列并返回附加序列的新包装器及其超类型的类型。它有两种方式 - 从右到左使用 :: 和从左到右使用 +。
现在这些是链接的结果:
Cont(Seq[Nothing]()) //-> Cont[Nothing]
Seq[Nothing]() :: Cont(Seq[Nothing]()) //-> Cont[Nothing]
Seq[Nothing]() :: Seq[Nothing]() :: Cont(Seq[Nothing]()) //-> Cont[E1]
Seq[Int]() :: Seq[Nothing]() :: Seq[Nothing]() :: Cont(Seq[Nothing]()) //-> Cont[Any]
Cont(Seq[Nothing]())//-> Cont[Nothing]
Cont(Seq[Nothing]()) + Seq[Nothing]()//-> Cont[Nothing]
Cont(Seq[Nothing]()) + Seq[Nothing]() + Seq[Nothing]() //-> Cont[Nothing]
Cont(Seq[Nothing]()) + Seq[Nothing]() + Seq[Nothing]() + Seq[Int]() //-> Cont[Int]
结果应该相同还是不应该?他们不是。我需要第二个(从左到右)行为。我什至不知道 Cont[E1] 是什么意思。发生这种情况有什么原因吗?使用 :: 的代码是否有任何修复?