是否存在用于在Scala中的匿名函数内绑定值的语法糖?

nam*_*min 6 scala anonymous-function syntactic-sugar

而不是写作

((x: Double) => (((y: Double) => y*y))(x+x))(3)
Run Code Online (Sandbox Code Playgroud)

我想写点类似的东西

((x: Double) => let y=x+x in y*y)(3)
Run Code Online (Sandbox Code Playgroud)

在Scala中有类似的这种语法糖吗?

Dan*_*wak 14

确实存在:它被称为" val".:-)

({ x: Double =>
  val y = x + x
  y * y
})(3)
Run Code Online (Sandbox Code Playgroud)

大括号当然是可选的,我只是在定义函数时更喜欢括号(毕竟,这不是Lisp).该val关键字定义当前词法范围内的新绑定.与Lisp和ML等语言不同,Scala不会强制本地人定义自己的范围.

实际上,它var也适用于任何范围,但它被认为是不好的使用方式.


Ger*_*mán 6

好的,这是带有绑定的一个班轮:

 ({ x:Double => val y = x + x; y * y })(3)
Run Code Online (Sandbox Code Playgroud)

干杯