gpt4 book ai didi

java - 为什么 java lambda 表达式不引入新级别的作用域?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:12 24 4
gpt4 key购买 nike

据我所知,在 Haskell 等语言中,作为 lambda 演算的一部分,每个 lambda 表达式都有自己的范围,所以如果我有嵌套的 lambda 表达式,例如:\x -> (\x -> x) 则第一个 \x 参数与第二个 \x 不同。

在 Java 中,如果你这样做,你会得到一个编译错误,就像你再次使用 x 作为参数名称或 lambda 中的局部变量名称,如果它已经在封闭的内部使用的话范围,例如作为方法参数。

有谁知道为什么 Java 以这种方式实现 lambda 表达式——为什么不让它们引入一个新级别的作用域并像匿名类那样表现?我假设这是因为某些限制或优化,或者可能是因为 lambda 必须被侵入到现有语言中?

最佳答案

这与 Java 中其他代码块的行为相同。

这会产生编译错误

int a;
{
int a;
}

虽然这不是

{
int a;
}
{
int a;
}

您可以在 section 6.4 of the JLS 中阅读有关此主题的信息,连同一些推理。

关于java - 为什么 java lambda 表达式不引入新级别的作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36942302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com