为什么foldLeft语法运算符有效,例如我期望这段代码
(10 / :( 1到5))(_ + _)
给我一个错误"值/:不是Int"的成员。它如何在类型系统中的所有类型上扩展方法/:?
答案 0 :(得分:3)
以下是"快捷方式的定义"操作者:
def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op)
如果操作符以冒号结尾,则它是右关联的。 1 :: Nil
是另一个示例,::
Int
这一切都有效:
(1 to 5)./:(10)(_ + _)
((1 to 5) foldLeft 10)(_ + _)
(几乎和你的例子相同,
但是在这里,更明显的是,foldLeft实际上是一种方法
范围对象)(1 to 5).foldLeft(10)(_ + _)
答案 1 :(得分:0)
您的问题并不完全清楚(表达式中没有提到n
),但是:以冒号结尾的运算符被解释为右侧参数的方法,而不是左侧的方法。你的表达相当于
(1 to 5)./:(10)(_ + _)
其中/:
更清晰地被视为左侧Range
对象的方法。