Lui*_*hys 4 generics collections scala scala-collections
Daniel Sobral展示了我们如何创建一个返回相同集合类型的方法,在这个问题的答案中调用它:在泛型方法中返回原始集合类型
是否可以对使用映射返回相同集合类型的不同参数化版本的方法执行相同操作?
例如
def foo[A](xs: GenTraversable[A]) = xs map (_.toString)
Run Code Online (Sandbox Code Playgroud)
foo( List(1, 2, 3) )
回报 res: GenTraversable[String] = List(1, 2, 3)
可以这样调整吗?
foo( Set(1, 2, 3) )
返回一个 Set[String]
foo( List(1, 2, 3) )
返回一个 List[String]
foo( Vector(1, 2, 3) )
返回一个 Vector[String]
延伸丹尼尔对相关问题的回答:
def foo[A,T[X] <: TraversableLike[X,T[X]]](xs: T[A])(implicit cbf: CanBuildFrom[T[A],String,T[String]]): T[String] = xs.map(_.toString)
Run Code Online (Sandbox Code Playgroud)
请注意,map
定义TraversableLike
的方法采用隐式CanBuildFrom
参数.这用于为所需的集合类型创建构建器,因此必须按照它在代码中的方式进行参数化(即,基于类型的集合,从元素T[A]
构建a ).T[String]
String
归档时间: |
|
查看次数: |
222 次 |
最近记录: |