Scala 中是不是有用于在匿名函数中绑定值的语法糖?

Posted

技术标签:

【中文标题】Scala 中是不是有用于在匿名函数中绑定值的语法糖?【英文标题】:Is there syntactic sugar for binding a value inside an anonymous function in Scala?Scala 中是否有用于在匿名函数中绑定值的语法糖? 【发布时间】:2010-09-22 19:51:00 【问题描述】:

而不是写

((x: Double) => (((y: Double) => y*y))(x+x))(3)

我想写一些类似的东西

((x: Double) => let y=x+x in y*y)(3)

Scala 中是否存在类似这种语法糖的东西?

【问题讨论】:

【参考方案1】:

确实有:它叫做“val”。 :-)

( x: Double =>
  val y = x + x
  y * y
)(3)

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

实际上,var 也适用于任何范围,但使用它被认为是不好的风格。

【讨论】:

谢谢 :) 我以为我已经尝试过了,但我一定是语法错误。有没有办法把所有东西都放在一条线上? @Germán 有单行版本。【参考方案2】:

好的,这是带装订的唯一衬里:

 ( x:Double => val y = x + x; y * y )(3)

干杯

【讨论】:

以上是关于Scala 中是不是有用于在匿名函数中绑定值的语法糖?的主要内容,如果未能解决你的问题,请参考以下文章

Scala基础:作为值的函数及匿名函数柯里化闭包及控制抽象

scala高级特性-01

匿名 Scala 函数语法

2021年大数据常用语言Scala(三十七):scala高级用法 高阶函数用法

Scala的高级特性

Scala的高级特性,实操演习