Scala 如何从泛型方法返回原始集合类型
我有一个泛型方法,它应该返回与输入类型相同的集合:Scala 如何从泛型方法返回原始集合类型,scala,generics,scala-generics,Scala,Generics,Scala Generics,我有一个泛型方法,它应该返回与输入类型相同的集合: def removeN[A, C <: Seq[A]](s: C, n: Int): C = { s.take(n) ++ s.drop(n + 1) // Sample operation } def removeN[A,C您所要求的功能可以使用collections library最强大但最有争议的功能之一来完成,即CanBuildFrom import scala.language.higherKinds import sca
def removeN[A, C <: Seq[A]](s: C, n: Int): C = {
s.take(n) ++ s.drop(n + 1) // Sample operation
}
def removeN[A,C您所要求的功能可以使用collections library最强大但最有争议的功能之一来完成,即CanBuildFrom
import scala.language.higherKinds
import scala.collection.generic.CanBuildFrom
def removeN[A, C[A] <: Seq[A]](s: C[A], n: Int)
(implicit cbf: CanBuildFrom[C[A], A, C[A]]): C[A] = {
val builder = cbf()
builder.sizeHint(s.size)
builder ++= s.take(n)
builder ++= s.drop(n + 1)
builder.result()
}
它似乎起作用了
需要导入scala.language.higherKinds
,以避免对更高种类(C[a])的使用发出警告
scala> removeN(List(4, 5, 6), 2)
res0: List[Int] = List(4, 5)
scala> removeN(Vector(4, 5, 6), 2)
res1: scala.collection.immutable.Vector[Int] = Vector(4, 5)