令人困惑的Scala高阶函数调用语法

时间:2013-08-04 23:29:24

标签: scala functional-programming higher-order-functions

我对scala中'block'{...} contruct的各种用法感到有点困惑,特别是在调用高阶函数时,如下例所示。

def higherOrder(func: Int => Int): Int = {
  func(4)
}

val f = ((x: Int) => x*x)

然后我可以这样打电话给更高级的人:

  1. higherOrder(f)

  2. higherOrder {f}

  3. higherOrder { x => x*x }

  4. (1)很明显, 但我无法理解编译器如何解析(2)和(3)的语法 关于language specification?

    ,有人可以解释(2)和(3)对应的内容

1 个答案:

答案 0 :(得分:4)

请参阅SLS 6.6功能应用。函数应用程序定义如下:

SimpleExpr ::= SimpleExpr1 ArgumentExprs
ArgumentExprs ::= ‘(’ [Exprs] ‘)’
                ...
                | [nl] BlockExpr

BlockExpr

BlockExpr ::= ‘{’ CaseClauses ‘}’
            | ‘{’ Block ‘}’

因此,在函数或方法名称之后,您可以在括号中指定参数列表或在大括号中指定表达式。