据我了解,像Haskell这样的语言以及λ演算中,每个λ表达式都有自己的作用域。因此如果我有嵌套的 λ 表达式,例如:
有没有人知道为什么Java会以这种方式实现lambda表达式 - 为什么不让它们引入新的作用域,并像匿名类一样运行呢?我猜想这是因为某些限制或优化,或者可能是因为需要将lambda集成到现有语言中。
\x -> (\x -> x)
,那么第一个 \x
参数就不同于第二个 \x
。
在Java中,如果这样做会导致编译错误,就像如果在lambda中再次使用x
作为参数名称或局部变量名称,若它已经在封闭作用域中被使用,比如作为方法参数。有没有人知道为什么Java会以这种方式实现lambda表达式 - 为什么不让它们引入新的作用域,并像匿名类一样运行呢?我猜想这是因为某些限制或优化,或者可能是因为需要将lambda集成到现有语言中。