编写我自己的通用地图函数

2023-11-26

我正在尝试编写自己的通用程序map功能和以下是我想出的:

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

这似乎适用于List, Vector,但不与Maps。我应该做哪些改变才能使其与Maps too?


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

然而你的map应用时的功能Maps 总是返回 aList即使返回一个有意义Map本身。你可以通过改变来避免这种情况CC[_] to CC。 (相关博文:Scala 中的通用快速排序.)

def map[A, B, CC <: Traversable[A], That]
       (xs: CC)(f: A => B)
       (implicit cbf: CanBuildFrom[CC, B, 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, Int), Map[Int, Int], Map[Int, Int]](Map(45 -> 32, 11 -> 9))(identity)
// gives Map(45 -> 32, 11 -> 9)

一定有某种方法可以避免这种丑陋的类型注释,但我不知道。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写我自己的通用地图函数 的相关文章

随机推荐

  • 删除flash 9中的右键菜单

    是否可以使用actionscript 3禁用右键菜单 非常感谢任何帮助 您可以使用 stage showDefaultContextMenu false 隐藏除设置选项之外的所有内容
  • Python urllib2 自动填表并检索结果

    我希望能够在站点上查询运行该脚本的计算机的保修信息 如果需要 它应该能够填写表格 例如惠普服务站点的情况 然后能够检索生成的网页 我已经准备好解析返回的结果 html 我只是遇到了麻烦 需要做什么才能对需要放入字段中的数据进行 POST 然
  • @id 和 @+id 有什么区别?

    我刚刚开始使用android 已经完成了大约5个布局文件 然而 我刚刚意识到我一直在互换使用 id和 id 但我不确定两者之间的确切区别是什么 你需要使用 id当您为视图定义自己的 Id 时 正是来自docs 字符串开头的 at 符号 表示
  • Objective-C 中 nil、NIL 和 null 的区别

    我想知道之间的区别nil NIL and null 我用谷歌搜索了一下 发现了这个 nil gt 指向 Objective C 对象的空指针 NIL gt 指向 Objective C 类的空指针 null gt 指向原始类型的空指针或缺少
  • Spring中如何根据配置创建多个相同类型的bean?

    我正在尝试在 Spring 中创建指定数量的相同类型的 bean 我试过了 Bean name beanList public List
  • Git 列出不存在的遥控器

    我最近在 Git 存储库配置文件中对远程存储库进行了一些更改 我重命名了远程名称 将我的起源更改为另一个远程存储库并重命名我的旧起源 例如 我之前有过这样的 remote origin url blah blah remote future
  • org.hibernate.LazyInitializationException:无法初始化代理 - 无会话

    我有 2 台物理服务器 我的 Web 应用程序由负载均衡器管理它们 我总是得到 org hibernate LazyInitializationException 无法初始化代理 无会话 当其中一台服务器受到攻击而另一台服务器运行顺利且没有
  • 反序列化 JSON,属性名称中包含点

    我正在尝试将属性名称中带有点的 JSON 反序列化为键值格式 我正在使用内置的 ASP NET MVC 模型绑定 它似乎将点解释为对象表示法 而不仅仅是键值对象 有没有办法让它正确反序列化为忽略点的键值 这很重要 因为数据需要以这种格式再次
  • 如何在Angular2中上传文件

    我必须提交表格和图像 我已经尝试过这段代码 通过多种方式 但对我不起作用 有没有人有使用 angular2 上传文件的工作演示 请帮助我 组件 html
  • 根据背景反转油漆颜色

    我正在写一个自定义进度条 我想创建类似的效果 其中 50 文本颜色动态更改为白色 而黑色条向右移动 使用 简单 的解决方案可能吗 我查阅了 PorterDuff ColorFilters xFermodes 似乎没有任何效果 有任何想法吗
  • 如何禁用 Servlet 3.0 扫描和自动加载组件

    我们有一个应用程序不断从我们的第 3 方库加载 ServletContainerInitializer 实例 一个实例是 JerseyServletContainerInitializer 另一个实例是 SpringServletConta
  • 没有任何焦点的按键绑定

    我有一个 WPF 屏幕 有六个按钮 我想将每个与键绑定相关联 它们都是通过 MVVM 驱动的 ICommand 我目前将键绑定绑定到事件而不是实际的按钮
  • 基于 PHP 的 HTML 验证器

    我需要找到一个基于 PHP 的 HTML 如 WC3 Like 验证器 它可以查找无效的 HTML 或 XHTML 我在谷歌上搜索了一下 但很好奇是否有人使用过他们特别喜欢的 我有一个字符串中的 HTML html 我希望能够测试该页面并让
  • 使用 RPATH 构建 OpenSSL?

    我有 Ubuntu 14 04 它附带了 openssl 1 0 1f 我想安装另一个openssl版本 1 0 2 并且我想自己编译它 我将其配置如下 LDFLAGS Wl export dynamic L home myhome pro
  • 如何在 C++ 中声明接口?

    如何设置代表接口的类 这只是一个抽象基类吗 扩展答案布拉德格默里 您可能希望通过添加虚拟析构函数来对接口的纯虚拟方法列表做出一个例外 这允许您将指针所有权传递给另一方 而无需公开具体的派生类 析构函数不必执行任何操作 因为该接口没有任何具体
  • 什么是差一错误以及如何修复它?

    什么是差一错误 如果我有 我该如何修复它 An 相差一误差例如 当您打算执行循环 n 次并编写如下内容时 for int i 1 i lt n i or for int i 0 i lt n i 在第一种情况下 将执行循环 n 1 次 在第
  • Flurry 分析在 Windows Phone 7 中崩溃

    我已将 Flurry http www flurry com 集成到我的 Phone 7 应用程序中 唯一需要的代码是应用程序启动中的这一行 FlurryWP7SDK Api StartSession ApiKeyValue 但是 一旦命中
  • 是否可以在不使用 foreach 的情况下重新创建此语句? [复制]

    这个问题在这里已经有答案了 可能的重复 C 具有继承的泛型类型的 Is 运算符 是否可以在不使用 foreach 语句的情况下将类类型从 Deal 更改为 Deal Bookmark Wrapper 时将一个列表添加到另一个列表中 var
  • Java服务重启4、5次

    我正在运行 Java 服务来轮询数据库中的数据 在我的班级中 我有一个线程 它每 5 秒在数据库中查找数据 在特定时间 比如下午 6 点非工作时间 我让线程休眠到某个配置的时间延迟 问题 当我让线程休眠时 似乎我的 Java 服务已重新启动
  • 编写我自己的通用地图函数

    我正在尝试编写自己的通用程序map功能和以下是我想出的 def map A B CC X lt Traversable X That xs CC A f A gt B implicit cbf CanBuildFrom CC B That