加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

泛型 – 编写我自己的通用地图功能

发布时间:2020-12-16 09:59:17 所属栏目:安全 来源:网络整理
导读:我正在尝试编写自己的通用映射函数,以下是我提出的: def map[A,B,CC[X] : Traversable[X],That] (xs: CC[A])(f: A = B) (implicit cbf: CanBuildFrom[CC[_],That]): That = { val b = cbf(xs) for (a - xs) b += f(a) b.result} 这似乎适用于List,Vector,但
我正在尝试编写自己的通用映射函数,以下是我提出的:

def map[A,B,CC[X] <: Traversable[X],That]             
       (xs: CC[A])(f: A => B)
       (implicit cbf: CanBuildFrom[CC[_],That]): That = {
  val b = cbf(xs)
  for (a <- xs)
    b += f(a)
  b.result
}

这似乎适用于List,Vector,但不适用于Maps.我应该做些什么改变,以便它也适用于地图?

解决方法

你的代码编译并运行得很好(注意:我使用的是Scala 2.9.0.1.你可能想提一下你正在使用的Scala版本.)

但是,在地图上应用地图函数时,即使返回地图本身也是有意义的,也会返回List.您可以通过将CC [_]更改为CC来避免这种情况. (相关博文:A Generic Quicksort in Scala.)

def map[A,CC <: Traversable[A],That]
       (xs: CC)(f: A => B)
       (implicit cbf: CanBuildFrom[CC,That]): That = {
  val b = cbf(xs)
  for (a <- xs)
    b += f(a)
  b.result
}

但是你需要在调用它时显式地键入 – 注释这个函数,这有点让人伤心.

val xs = Map(45 -> 32,11 -> 9)
map[(Int,Int),(Int,Map[Int,Int],Int]](Map(45 -> 32,11 -> 9))(identity)
// gives Map(45 -> 32,11 -> 9)

必须有一些方法来避免这种丑陋的类型注释,但我不知道它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读