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