【问题标题】:scala : use of braces for a function when the parameter is a predicate [duplicate]scala:当参数是谓词时,函数使用大括号[重复]
【发布时间】:2015-08-27 05:25:13
【问题描述】:

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

sn-p 是这样的:

// 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 是否也有函数?

【问题讨论】:

  • 我尝试了 mapFlatten(..),它似乎也可以工作。 @ThiagoPereira 我认为您的链接的答案适用于我的情况。谢谢!
  • 我会回答的

标签: scala functional-programming


【解决方案1】:

根据这个答案

Why use curly braces over parentheses?

在某些情况下确实需要使用大括号(多行表达式),而在某些情况下则不需要。

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

在这种情况下:

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

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

【讨论】:

    【解决方案2】:

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

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

    然后:

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

    【讨论】:

    • 可怕.. 只是标准化这些东西已经.. :) 无论如何,谢谢你的回答。我在哪里读过这篇文章,我无法理解。
    猜你喜欢
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2016-10-09
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2017-02-01
    相关资源
    最近更新 更多