【发布时间】:2020-10-14 12:33:02
【问题描述】:
看完What is the formal difference in Scala between braces and parentheses, and when should they be used?,还是不知道怎么理解{}包裹的函数值。
考虑以下两个 REPL 会话:
@ val f = { (x: Int) =>
x
val y = x
y
}
f: Int => Int = ammonite.$sess.cmd30$$$Lambda$1765/0x0000000801346840@24c7b944
@ { (x: Int) =>
x
val y = x
y
}
cmd31.sc:3: not found: value x
val y = x
^
Compilation Failed
我有几个问题。
- 为什么第一个 sn-p 编译而第二个不编译?在第一个 sn-p 中,编译器知道
{...}作为一个整体是一个函数值。在第二个 sn-p 中,只有(x: Int) => \n x部分是函数值(抱歉\n表示换行)。为什么? - 关于
{ (x: Int) => \n ... },什么时候解释为函数值,什么时候不解释? - 大括号(
{})是函数值的一部分,还是只有(...) => ...里面是函数值?如果它是它的一部分,表格是否有名称?例如,我认为(_ + _)可以称为函数值的占位符语法。
更新:这纯粹是一个菊石问题。详情见答案。
【问题讨论】: