正确的例子:
"Hello".foldLeft(1L)((a, b) => a * b)
REPL打印错误:
"Hello" foldLeft(1L)((a, b) => a * b)
如何解释?有一些规则吗?我认为在Scala中跳过点是很好的,但有些例子不起作用。
错误:长(1L)不接受参数" Hello" foldLeft(1L)((a,b) => a * b)
答案 0 :(得分:1)
您可以使用Arix-1(单个参数)的方法使用“中缀表示法”。惯例是将这些用于纯功能方法。使用像foldLeft这样的curried函数(多个参数列表),你只能对第一个参数列表使用中缀表示法(这会令人困惑,你可能不想这样做。)
相关:
What are the precise rules for when you can omit parenthesis, dots, braces, = (functions), etc.?
文档:
http://docs.scala-lang.org/style/method-invocation
使用curried函数:
答案 1 :(得分:1)
foldLeft
是一个curried函数,curry函数不能直观地与infix(无点)表示法一起使用。你需要在括号中包装中缀调用,如下所示:
scala> ("Hello" foldLeft 1L)((a, b) => a * b)
res0: Long = 9415087488
在这种情况下,我建议不要使用这种用法。
对于某些一般规则,您可以查看here。