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
mapFlatten{
而不是
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.
我一生都在做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
mapFlatten{
而不是
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.