我对scala中'block'{...} contruct的各种用法感到有点困惑,特别是在调用高阶函数时,如下例所示。
def higherOrder(func: Int => Int): Int = {
func(4)
}
val f = ((x: Int) => x*x)
然后我可以这样打电话给更高级的人:
higherOrder(f)
或
higherOrder {f}
或
higherOrder { x => x*x }
(1)很明显, 但我无法理解编译器如何解析(2)和(3)的语法 关于language specification?
,有人可以解释(2)和(3)对应的内容答案 0 :(得分:4)
请参阅SLS 6.6功能应用。函数应用程序定义如下:
SimpleExpr ::= SimpleExpr1 ArgumentExprs
ArgumentExprs ::= ‘(’ [Exprs] ‘)’
...
| [nl] BlockExpr
BlockExpr
是
BlockExpr ::= ‘{’ CaseClauses ‘}’
| ‘{’ Block ‘}’
因此,在函数或方法名称之后,您可以在括号中指定参数列表或在大括号中指定表达式。