【发布时间】:2016-08-24 20:22:28
【问题描述】:
据我了解,在 Haskell 等语言中,以及作为 lambda 演算的一部分,每个 lambda 表达式都有自己的范围,所以如果我有嵌套的 lambda 表达式,例如:\x -> (\x -> x),那么第一个 \x 参数不同于第二个\x。
在 Java 中,如果你这样做,你会得到一个编译错误,就像你再次使用 x 作为参数名称或 lambda 中的局部变量名称,如果它已经在封闭范围内使用,例如作为方法参数。
有谁知道为什么 Java 以这种方式实现 lambda 表达式 - 为什么不让它们引入一个新级别的范围并像匿名类一样表现?我假设这是因为一些限制或优化,或者可能是因为 lambdas 必须被入侵到现有语言中?
【问题讨论】:
-
在此类语言中,您如何引用嵌套 lambda 中的外部 x?
-
@SotiriosDelimanolis 你不一定必须能够,这是一个设计决定。你可以G。也不要从匿名类访问局部变量 x,在该类中定义另一个完全有效的 x。
标签: java function lambda expression lambda-calculus