gpt4 book ai didi

转换泛型 Collection 的 Scala 方法

转载 作者:行者123 更新时间:2023-12-01 11:20:00 27 4
gpt4 key购买 nike

如何创建一个采用通用集合的方法 M[A]和来自 A 的函数至 B并返回一个集合 M[B] , 使用 map 方法?

类似于: def convert[A, M[X] <: Traversable[X], B](in: M[A], f: A => B): M[B] =
in.map(f)

上面的方法编译失败:type mismatch; found : Traversable[B] required: M[B] .由于 Traversable[A].map(f: A => B) 的静态类型是Traversable[B]正如 Oleg Pyzhcov 所指出的

注意:此方法的目的不仅仅是映射集合,这只是一种简化。

最佳答案

map 的完整签名是

def map[B, That](f: (A) ⇒ B)(implicit bf: CanBuildFrom[Repr, B, That]): That

因此您需要从调用站点提供 CanBuildFrom 并确保将 Repr 推断为您的具体类型 M[A]通过使用以 Like 结尾并具有两个类型参数

的集合特征
import scala.collection.generic.CanBuildFrom
import scala.collection.TraversableLike
import scala.language.higherKinds

def convert[M[x] <: TraversableLike[x, M[x]], A, B](
in: M[A],
f: A => B
)(implicit
cbf: CanBuildFrom[M[A], B, M[B]]
): M[B] = in.map(f)(cbf)

关于转换泛型 Collection 的 Scala 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45054543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com