据我所知,在语言如Haskell中,并且也可作为演算的一部分,每个拉姆达表达式都有自己的范围,因此,如果我有嵌套lambda表达式如:\x -> (\x -> x)
则第一\x
参数是到所述第二不同\x
。为什么java lambda表达式不会引入新的范围级别?
在Java中,如果你这样做,你会得到一个编译错误,就像你再次使用x
作为参数名称或者lambda中的一个局部变量名,如果它已经在封闭范围内使用的话。作为方法参数。
有谁知道为什么Java实现的lambda表达式这种方式 - 为什么不把他们介绍的范围内一个新的水平和表现得像一个匿名类会吗?我假设这是因为一些限制或优化,或者可能是因为lambda必须被黑入现有语言?
你如何参考外X在这样的语言中嵌套拉姆达内? –
@SotiriosDelimanolis你不一定要能够做到这一点,这是一个设计决定。你可以e。 G。也不能从一个匿名类访问局部变量x,在那里定义另一个非常有效的x。 – Vampire
[Variable已经在方法lambda中定义]的可能重复(https://stackoverflow.com/questions/22773003/variable-is-already-defined-in-method-lambda) – ZhekaKozlov