Scala 防止混合的方法

2024-07-04

我想创造以下特征:

trait IntSet[A] extends Traversable[A] { self: Product =>
  def foreach[U](f: A => U): Unit
}

case class AProduct(a: List[Int], b: List[Int]) extends IntSet[Int] {
  def foreach[U](f: Int => U): Unit = {
    for(aa <- a; bb <- b) f(aa*bb)
  }
}

 AProduct(List(1, 5,6,7), List(2,3,4,5)).toString

returns

(2, 3, 4, 5, 10, 15, 20, 25, 12, 18, 24, 30, 14, 21, 28, 35)

但我不希望案例类中的 toString 方法被可遍历的方法覆盖!我该如何克服这个问题?

我希望最终的输出是:

"AProduct(List(1, 5,6,7), List(2,3,4,5))"

如果可能的话,我想在 IntSet 中做以下以外的事情:

override def toString = this.getClass().getName()+"("+self.productIterator.mkString(",")+")"

这可行,但我真的不想重新发明轮子。


你不需要实施IntSet in AProduct。您可以只添加所有方法而无需继承,如下所示:

case class AProduct(a: List[Int], b: List[Int])
object AProduct {
  implicit class AProductIntSet(p: AProduct) extends Traversable[Int] {
    def foreach[U](f: Int => U): Unit = {
      for(aa <- p.a; bb <- p.b) f(aa*bb)
    }
  }
}

val ap = AProduct(List(1, 5,6,7), List(2,3,4,5))
// AProduct = AProduct(List(1, 5, 6, 7),List(2, 3, 4, 5))

ap.toString
// String = AProduct(List(1, 5, 6, 7),List(2, 3, 4, 5))

ap.map{_ + 1}
// Traversable[Int] = List(3, 4, 5, 6, 11, 16, 21, 26, 13, 19, 25, 31, 15, 22, 29, 36)

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

Scala 防止混合的方法 的相关文章

随机推荐

  • Java自动将集合转换为参数数组?

    我知道Java 数组参数语法可以接收数组作为参数 或者只是传递给方法的许多参数 然而 我注意到它对于集合也是如此 public static void main String args Collection objects new Arra
  • 如何获取消息框中的文本和变量

    我只需要知道如何在消息框中包含纯文本和变量 例如 我可以做这个 MsgBox variable 我可以这样做 MsgBox Variable 但我不能这样做 MsgBox Variable variable 正如所建议的 使用 string
  • iOS 11 和 XCode 9.3 - HTTP 加载失败

    iOS11 设备偶尔会出现此错误 HTTP 加载失败 错误代码 1005 1 54 该应用程序正在连接到 https json Web 服务 当它在前台时 一切都运行顺利 计时器正在执行 Web 服务调用 但有时 无法始终复制问题 当应用程
  • 如何将angularjs变量值分配给html元素属性,例如输入elememnt的name属性

    我对 Angular 完全陌生 我有一个 AngularJS scope 变量 scope testme inputname 我想将此变量值分配给 html 元素的 name 属性 我想 结果如下
  • 这些 strace 系统调用是什么意思?

    我需要分析我正在使用 strace 的应用程序的性能 但是 我真的不知道如何解释 strace 发出的各种系统调用 其中一些示例如下 A lseek 3 1600 SEEK SET 1600 B write 3 G DATA 300 0 8
  • jquery中的ontouchstart和ontouchend?

    我目前正在对要更改触摸类的每个元素使用以下内容 ontouchstart this addClass select ontouchend this removeClass select 我想知道是否有这样的事情 element touchs
  • 未找到特征“Venturecraft\Revisionable\RevisionableTrait”

    我正在使用 laravel 4 我想跟踪对表进行的所有交易的历史记录 我按照这些步骤操作 added venturecraft revisionable 1 在作曲家 json php composer phar update 在我的项目的
  • HBase 无法在 Windows 上以独立模式启动

    我下载了HBase 1 0 1在我的 Windows 机器上 无法启动它 我收到以下错误消息 C Users admin Downloads hbase 1 0 1 gt bin start hbase cmd Error Could no
  • 单击 Facebook 登录按钮后重定向,即使已经登录 Facebook

    我的主页上有标准的 Facebook 登录按钮 我不希望人们仅在用户单击登录按钮时才使用其 Facebook 帐户自动登录我的网站 如果用户未登录 Facebook 则会出现一个弹出窗口 询问他的凭据 然后他将被重定向到loggedin h
  • 如何通过在单个查询中添加 MySQL 数据库来更新 MySQL 数据库表中的字段

    我有一个表 用于存储随着时间的推移而添加的值 当我想添加值时 我想在单个查询中执行此操作 而不是 从数据库获取oldValue 新值 旧值 X 使用 newValue 更新行 query1 从表中选择值 其中 id thisID 结果1 m
  • 为什么 Stream 没有 toList() 方法?

    使用 Java 8 流时 获取一个列表 从中创建一个流 执行业务并将其转换回来是很常见的 就像是 Stream of 2 1 2 5 filter n gt n gt 0 map n gt n n collect Collectors to
  • OpenGL Vulkan 互操作性

    我需要一些有关 OpenGL Vulkan 内存交换的帮助 我已经找到这个主题了如何从 Vulkan 渲染到 OpenGL https stackoverflow com questions 38907764 how to render t
  • AWS SQS 触发器 Step Functions

    快速问题 发送 SQS 消息后是否可以触发 Step Function 的执行 如果可以 您如何将其指定到 cloudformation yaml 文件中 提前致谢 首先要考虑的是 你really需要使用 SQS 启动 Step Funct
  • Qt组件的边框颜色

    我想更改 QFrame 组件的边框颜色 还尝试使用样式表 但在运行时没有效果 在我的项目中 有各种对话框 UI 它们基本上都是 QFrame 我想更改所选对话框的边框颜色 即 QFrame 边框颜色 QT 中有没有解决这个问题的方法 如下所
  • SUM 的 LINQ 组

    给出以下查询 Dim Query From c In DB Crt Where c Member Locked False And c Member Verified True And c Ct gt 0 Order By c Ct Asc
  • 为什么有些网站不允许更改字体大小?

    我几乎总是使用比默认字体大得多的字体浏览网页 使它更容易阅读 但有时我注意到有些网站不允许放大字体 至少在 Chrome 上是这样 比如这个网站 http en support wordpress com domains map exist
  • 如何使用 Android Volley 显示/请求 JSON 对象?

    我在 Android Studio 中遇到如何请求 JSON 对象的问题 我的 Logcat 只能打印 String onResponse 而不能打印 JSONObject 值 我在 AccessActivity java 内的 try 行
  • 将全局变量传递给函数有问题吗?

    考虑以下函数声明 int abmeld char strsend 这是这样称呼的 abmeld str where str是在程序文件开头 包含之后 声明和初始化的全局变量 如下所示 char str 300 现在我已经知道这是不必要的代码
  • 将 PHP 转换为数组并循环

    我正在为我们的空手道学校开发一个应用程序 希望从数据库中获取技术名称 将它们以随机顺序存储在一个数组中 并且能够单击一个按钮一次在整个数组中移动 我以几种不同的方式考虑过这个问题 包括从数据库中随机进行 这非常简单 但它多次提取相同的技术
  • Scala 防止混合的方法

    我想创造以下特征 trait IntSet A extends Traversable A self Product gt def foreach U f A gt U Unit case class AProduct a List Int