我正在尝试用Scala学习FP。我在一个对象上有一个函数来合并两个排序的集合并返回相同的类型。它看起来像这样:
@tailrec def merge[A, Repr <: Seq[A]](merged: Repr, l1: Repr, l2: Repr)(
implicit ordering: Ordering[A]): Repr = {
if (l1.isEmpty) merged ++ l2
else if (l2.isEmpty) merged ++ l1
else {
val l1Head: A = l1.head
val l2Head = l2.head
val orderVal = ordering.compare(l1Head, l2Head)
if (orderVal <= 0) {
val m2: Repr = l1Head +: merged
merge[A, Repr](m2, l1.tail, l2)
} else {
merge[A, Repr](l2Head +: merged, l1, l2.tail)
}
}
}
它给了我编译器错误"Seq[A] 类型的表达式不符合预期的类型 Repr
尝试
@tailrec def merge[A, Repr](merged: Repr, l1: Repr, l2: Repr)(implicit
ev: Repr => SeqLike[A, Repr],
cbf: CanBuildFrom[Repr, A, Repr],
ordering: Ordering[A]
): Repr = {
if (l1.isEmpty) merged ++ l2
else if (l2.isEmpty) merged ++ l1
else {
val l1Head: A = l1.head
val l2Head = l2.head
val orderVal = ordering.compare(l1Head, l2Head)
if (orderVal <= 0) {
val m2: Repr = l1Head +: merged
merge[A, Repr](m2, l1.tail, l2)
} else {
merge[A, Repr](l2Head +: merged, l1, l2.tail)
}
}
}