scala:当参数是谓词时,对函数使用大括号

scala : use of braces for a function when the parameter is a predicate

我一生都在做C/Java/C3/Python/JS。从昨天开始我在看一些 scala 代码,现在我对一切都非常困惑..

片段如下:

// Parse the input file
  val lines = fromTextFile(input)

    // Iterate on every element to generate the keys, and then aggregate it
  val counts = lines.mapFlatten{
        line =>
        val rowSplit = line.split(",",-1)

..... }

方法mapFlatten in scoobi api的签名是:

def mapFlatten[B](f: (A) ⇒ Iterable[B])(implicit arg0: WireFormat[B]): DList[B]

为什么我们用调用mapFlatten

而不是

是不是因为函数把谓词作为参数?

从这个意义上说,while, else, if 也起作用吗?

根据这个回答

Why use curly braces over parentheses?

有些情况下您确实需要使用花括号(多行表达式),有些情况下您不需要。

确实都是函数里面接收函数

在这种情况下:

def mapFlatten[B](f: (A) ⇒ Iterable[B])(implicit arg0: WireFormat[B]): DList[B]

你传递了一个函数 f:(A) 应该导致 Iterable[B]

来自 Programming in Scala,第一版,第 7 版(是的,有点过时):

In any method invocation in Scala in which you're passing in exactly one argument, you can opt to use curly braces to surround the argument instead of parentheses.

然后:

The purpose of this ability ... is to enable client programmers to write function literals between curly braces. This can make the method call feel more like a control abstraction.