Generics 返回相同的集合类型,参数设置不同

Generics 返回相同的集合类型,参数设置不同,generics,scala,collections,scala-collections,Generics,Scala,Collections,Scala Collections,Daniel Sobral向我们展示了如何创建一个方法,该方法返回的集合类型与他在回答这个问题时调用的集合类型相同: 对于使用映射返回相同集合类型的不同参数化版本的方法,是否可以执行相同的操作 比如说 def foo[A](xs: GenTraversable[A]) = xs map (_.toString) foo(List(1,2,3))返回res:GenTraversable[String]=List(1,2,3) 是否可以对其进行调整,以便 foo(Set(1,2,3))返回一个Se

Daniel Sobral向我们展示了如何创建一个方法,该方法返回的集合类型与他在回答这个问题时调用的集合类型相同:

对于使用映射返回相同集合类型的不同参数化版本的方法,是否可以执行相同的操作

比如说

def foo[A](xs: GenTraversable[A]) = xs map (_.toString)
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(向量(1,2,3))
返回一个
向量[String]
扩展Daniel对链接问题的回答:

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)

def foo[A,T[X]由于擦除会删除您的类型参数,因此您可以断言传递非常容易。
def foo[T](X:T)=x
works@huitseeker好的观点,谢谢;我的意图不是真的传递断言,而是写一个做正确事情的方法,所以我编辑了好的,是的,但是你真的应该解释为什么
可以从那里构建。谢谢,这非常有效。我觉得这应该容易得多;也许是lesson是说,我们不应该将集合传递给方法,而应该映射到函数,在函数中定义处理,而不是方法。这在Scala 2.9.2:-(编译错误是类型不匹配;它看到从映射返回TraversableOnce[Any],并需要一个t[String]。