據我所知,在語言如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