在scala /:方法中,为什么在调用

时间:2017-09-16 03:48:37

标签: scala

scala /中的List方法:

def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op)

foldLeft的调用是:

(List(1, 7, 2, 9) foldLeft 0) (_ + _)

调用/:是:

(0 /: List(1, 7, 2, 9)) (_ + _)

那个0实际上是方法的第一个参数,为什么方法的0放在前面,而不是像后面的foldLeft

1 个答案:

答案 0 :(得分:0)

以冒号:结尾的方法名称在Scala中是右关联的,也就是当它们在运算符语法中使用时,它们在它们右侧的对象上被调用,其对象位于它们的左侧作为参数。

所以你的调用

(0 /: List(1, 7, 2, 9)) (_ + _)

基本相同
List(1, 7, 2, 9)./:(0) (_ + _ )

如果习惯了语义,那么第一个允许更好的语法。