【发布时间】:2023-03-10 14:00:01
【问题描述】:
我想实现类似的东西:
def f(s: Seq[Int]): Vector[String] = s.map(_.toString).toVector
但我希望它直接创建输出向量,而无需先执行map,制作任何 Seq,然后再将其复制到向量中。
Seq.map 采用隐含的canBuilFrom 参数,该参数诱导集合输出类型。所以我尝试了s.map(...)(Vector.canBuildFrom[String]),它给出了错误:
found : scala.collection.generic.CanBuildFrom[Vector.Coll,String,scala.collection.immutable.Vector[String]]
(which expands to) scala.collection.generic.CanBuildFrom[scala.collection.immutable.Vector[_],String,scala.collection.immutable.Vector[String]]
required: scala.collection.generic.CanBuildFrom[Seq[Int],String,Vector[String]]
def f(s: Seq[Int]): Vector[String] = s.map(_.toString)(Vector.canBuildFrom[String])
基本上它不能正确推断 CanBuildFrom 的第一个类型参数
如何做到这一点?
【问题讨论】:
标签: scala generics collections