foldLeft操作符是如何在Scala中实现的?

foldLeft操作符是如何在Scala中实现的?,scala,Scala,为什么foldLeft语法运算符可以工作,例如,我希望这段代码 (10/:(1至5))(u+uu) 给我一个错误“value/:不是Int的成员”。它如何扩展method/:在type system中的所有类型上?您的问题并不完全清楚(表达式中没有提到n),但是:以冒号结尾的运算符被解释为右参数上的方法,而不是左参数上的方法。你的表达相当于 (1 to 5)./:(10)(_ + _) 其中/:更清楚地被视为左侧范围对象的一种方法。以下是“快捷方式”操作符的定义: def /:[B](z: B

为什么foldLeft语法运算符可以工作,例如,我希望这段代码

(10/:(1至5))(u+uu)


给我一个错误“value/:不是Int的成员”。它如何扩展method/:在type system中的所有类型上?

您的问题并不完全清楚(表达式中没有提到
n
),但是:以冒号结尾的运算符被解释为右参数上的方法,而不是左参数上的方法。你的表达相当于

(1 to 5)./:(10)(_ + _)

其中
/:
更清楚地被视为左侧
范围
对象的一种方法。

以下是“快捷方式”操作符的定义:

def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op)
如果运算符以冒号结尾,则为右关联运算符
1::Nil
是另一个例子,在
Int

这一切都有效:

  • (1到5)。/:(10)(u+u)
  • ((1到5)foldLeft 10)(u+)
    (与您的示例几乎相同, 但这里更明显的是foldLeft实际上是 范围(对象)
  • (1到5)。foldLeft(10)(u+)

::不是一个方法吗?它是一个带有应用和取消应用方法的对象。你确定吗?我们都是对的,以下是
案例类(=>(un)apply):