scala:当参数是谓词

时间:2015-06-11 13:24:53

标签: scala functional-programming

我一生都在做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({

是因为该函数将谓词作为参数吗?

在这个意义上,

,否则,如果也起作用?

2 个答案:

答案 0 :(得分:1)

根据这个答案

Why use curly braces over parentheses?

有些情况下,您需要使用卷曲括号(多行表达式)和不需要的情况。

实际上,它们都是接收内部功能的功能。

在这种情况下:

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

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

答案 1 :(得分:1)

来自 Scala编程,拳头版,第7版(是的,有点过时):

  

在Scala中的任何方法调用中,您只需要传入一个参数,就可以选择使用花括号括起参数而不是括号。

然后是:

  

此功能的目的是使客户端程序员能够在花括号之间编写函数文字。这可以使方法调用更像是一种控件抽象。