自定义类上的 List.sum

2024-05-04

我有以下代表 GF2 字段的代码:

trait GF2 {
  def unary_- = this
  def + (that: GF2): GF2
  def * (that: GF2): GF2

  def / (that: GF2) = that match {
    case Zero => throw new IllegalArgumentException("Div by 0")
    case _ => this
  }
}

object Zero extends GF2 {
  override def toString = "Zero"
  def + (that: GF2) = that
  def * (that: GF2) = this
}

object One extends GF2 {
  override def toString = "One"
  def + (that: GF2) = that match { case One => Zero ; case _ => this }
  def * (that: GF2) = that match { case One => this ; case _ => that }
}

现在我想调用这个函数:List(One, One, Zero, One).sum这样GF2._+会要求求和,我该如何实现呢?应该GF2扩展一些接口还是应该实现类型类技术?


您需要一个隐式的 Numeric[GF2]:

trait GF2IsNumeric extends Numeric[GF2] {
  def plus(x: GF2, y: GF2): GF2 = x + y
  def minus(x: GF2, y: GF2): GF2 = x + (-y)
  def times(x: GF2, y: GF2): GF2 = x * y
  def negate(x: GF2): GF2 = -x
  def fromInt(x: Int): GF2 = ???
  def toInt(x: GF2): Int = ???
  def toLong(x: GF2): Long = ???
  def toFloat(x: GF2): Float = ???
  def toDouble(x: GF2): Double = ???
  override def zero = Zero
  override def one = One
}

trait GF2Ordering extends scala.math.Ordering[GF2] {
  override def compare(a: GF2, b: GF2) = if (a == b) 0 else if (b == One) 1 else -1
}

implicit object GF2IsNumeric extends GF2IsNumeric with GF2Ordering

然后你可以这样做:

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

自定义类上的 List.sum 的相关文章

随机推荐

  • 显示删除了多少行

    我使用C 程序 我的数据库是SQL Server 2008 当用户从数据库中删除一些行时 我想在 Windows 应用程序中向他 她显示删除了多少行 我想知道如何将 SQL 消息发送到 C 并向用户显示 例如 当我从表中删除 4 行时 SQ
  • 删除框架,同时保留 pyplot 子图中的轴

    我正在创建一个包含 3 个子图的图形 并且想知道是否有任何方法可以移除它们周围的框架 同时保持轴就位 如果您想删除轴脊 但不想删除其他信息 刻度 标签等 您可以这样做 fig ax plt subplots 7 1 sharex True
  • 在 F# 中“合并”受歧视的联合?

    继从这个问题 https stackoverflow com questions 53506325 result vs raise in f async 我在组合不同类型时遇到问题Result类型在一起 以下是一个人为的示例 不是真实的代码
  • AppCompat Spinner 的 TextInputLayout 错误对齐问题

    我正在使用一个显示下拉列表的应用程序Spinner与EditText作为一个孩子TextInputLayout在它的旁边 当下面显示带下划线的错误时TextInputLayout 那么EditText会上升 并且对齐会丢失 请看我的截图 我
  • 为什么mysql状态key_reads,key_reads_request的值为零?

    我对 mysql 状态有些困惑 mysql gt 显示类似 key 的状态 Variable name Value Com assign to keycache 0 Com preload keys 0 Com show keys 0 Ha
  • 如何更新我的流星项目中的 cordova-plugin-device ?

    当我运行流星项目时 我收到此警告 警告 尝试安装插件 电子邮件受保护 cdn cgi l email protection 但 它的最低版本应为 1 1 1 以确保与 当前平台版本 安装最小 版本以方便起见 但您应该调整您的依赖项 然后 我
  • Angular 2 中的 ag-grid 单元测试

    有人在 Angular 2 中对 ag grid 组件进行过单元测试吗 对我来说 测试用例运行时 this gridOptions api 仍然未定义 很抱歉参加聚会有点晚了 但几天前我一直在寻找这个问题的答案 所以想为最终来到这里的其他人
  • iOS 12.1 上的 UITabBar 项目在返回导航上跳跃

    我有一个 iOS 应用程序UITabBarController在主屏幕上 导航到隐藏的详细信息屏幕UITabBarController有设置hidesBottomBarWhenPushed true 返回主屏幕时UITabBarContro
  • 使用 EnableCors 时“请求的资源不支持 http 方法‘OPTIONS’”

    我想在 Asp net Web Api 中的一项特定操作上启用 CORS 我正在尝试这样做 Route api mycontroller myaction HttpPost EnableCors https example com post
  • 如何强制编译器在 C++ 中通过引用传递某些变量?

    这是一个简单的例子 template
  • 如何预渲染多个Vue应用页面?

    我正在尝试 未成功 在使用 Vue CLI 搭建的同一项目中预渲染多个 Vue 应用程序的 HTML 由于多种原因 我不想使用 Vue Router 或 Nuxt 等 我尝试过使用预渲染 Spa 插件 https github com ch
  • 关于 Python 解析器生成器的建议

    我接到一项任务 必须为简单的类 C 语言创建一个解析器 我可以使用任何我希望创建解析器的编程语言和工具 但我同时正在学习 Python 所以它是我的首选 我的解析器必须遵循一些限制 首先 它必须能够读取包含以下信息的文本文件 kind1 s
  • 在 IIS 中启用 JavaScript GZIP 压缩?

    我们希望使用 GZip 压缩庞大的 JavaScript 文件 以加快网站的页面加载速度 我知道这可以通过 IIS 来完成 但我似乎找不到关于如何实现它的简单分步指南 如果有人能向我指出这样的指南 我将非常感激 我以前从未这样做过 所以它需
  • 在 Dockerfile 中安装节点?

    我是AWS elastic beanstalk的用户 我遇到了一些问题 我想用 less node 构建我的 CSS 文件 但我不知道在使用 jenkins 构建时如何在 dockerfile 中安装节点 这是我在 docker 中使用的安
  • 对数组中的每个元素设置 $scope.$watch

    我想弄清楚如何设置 scope watch在数组中的每个元素上 我只关心每个元素的某些属性 在我的例子中 每个rental date对象具有三个属性 date start time and stop time 每当start time已更改
  • 如何从 firebase 导出无崩溃的用户?

    我想将有关崩溃和无崩溃用户指标的数据保留在数据库中以供进一步分析 我已经将该项目链接到 BigQuery 但找不到计算方法无崩溃用户BigQuery 中包含的数据价值 是否可以以某种方式导出无崩溃的用户指标 这里是 Fabric Fireb
  • 将 system.web 应用程序池添加到 web.config 会导致 500 内部服务器错误

    我正在尝试将以下内容添加到我的网络配置中
  • 如何从构建管道内的项目存储库中的azure存储blob下载文件(Azure DevOps)

    需要一种在构建过程中将一组文件从 Azure Blob 存储下载到项目存储库的方法 该流程的目的是对移动应用程序进行 CI CD 但是移动应用程序的图标 背景图像和一些其他图像是由其他应用程序提供的 因此在构建过程中图像应该从 blob 存
  • 访问 Spring-MVC 中的应用程序属性

    Spring MVC 的新手 我想在 properties 文件中存储两个属性 uploadFolder downloadFolder 在 HomeController 类 由 MVC 模板自动创建 中访问它 你能指导我如何 1 用上面的内
  • 自定义类上的 List.sum

    我有以下代表 GF2 字段的代码 trait GF2 def unary this def that GF2 GF2 def that GF2 GF2 def that GF2 that match case Zero gt throw n