4

我对 scala 中 'block' {...} 结构的各种用途感到有些困惑,尤其是在调用以下示例中的高阶函数时。

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

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

然后我可以像这样调用higherOrder:

  1. higherOrder(f), 或者

  2. higherOrder {f}, 或者

  3. higherOrder { x => x*x }

(1) 很明显,但我无法理解编译器如何解析 (2) 和 (3) 的语法 有人能解释一下 (2) 和 (3) 对应的语言规范吗?

4

1 回答 1

4

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

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

并且BlockExpr

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

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

于 2013-08-05T05:31:24.640 回答