用下划线表示法引用相同的元素

时间:2018-12-21 19:35:12

标签: scala

我有以下类定义和列表

class myclass{
  val val1: Int = 1
  val val2: Int = 2
  ...
}
val mylist = List(a: myclass, b: myclass, c: myclass, d: myclass)

如何将下一行代码转换为下划线符号

mylist.foldLeft(0)((x,y) => x + y.val1 * y.val2)

我知道下一行不起作用:

(0 /: mylist)(_ + _.val1 * _.val2)

这是因为第一个_被引用到x,第二个被引用到y,但是第三个_标量不知道引用了哪个变量,我的问题是,是否有一种可行的方法

1 个答案:

答案 0 :(得分:2)

这不太疯狂:

scala> case class C(v: Int, w: Int)
defined class C

scala> val cs = List(C(1,2),C(3,4))
cs: List[C] = List(C(1,2), C(3,4))

scala> cs.iterator.map(c => c.v*c.w).foldLeft(0)(_+_)
res0: Int = 14

它表示操作是独立的。迭代避免了中间列表。