Anladığım kadarıyla, hem Haskell hem de lambda matematiğinin bir parçası olarak, her lambda ifadesinin kendi kapsamı vardır, yani \x -> (\x -> x)
gibi iç içe geçmiş lambda ifadeleri varsa, ilk \x
parametresi ikinci \x
.Neden java lambda ifadeleri yeni bir kapsam düzeyi sunmuyor?
Java'da bunu yaparsanız, bir derleme hatası alırsınız, tıpkı x
parametresini, lambda içinde çevreleyen kapsam içinde kullanılmışsa, parametre adı veya yerel değişken adı olarak tekrar kullanırsanız, örn. bir yöntem parametresi olarak. neden olmasın onları anonim sınıfın yaptığımız gibi kapsam yeni bir seviyeye tanıtmak ve davranırlar var - Java lambda ifadeler bu şekilde hayata neden
bilen var mı? Bunun bir sınırlama ya da optimizasyondan dolayı mı yoksa muhtemelen lambdas'ın mevcut dile hapsolması gerektiğinden mi varsayıyorum?
Böyle dilde iç içe lambda içinde dış x atıfta nasıl? –
@SotiriosDelimanolis Yapabilmek zorunda değilsiniz, bu bir tasarım kararıdır. Yapabilirsin. g. Ayrıca, tamamen geçerli olan başka bir x tanımladığınız anonim bir sınıftan x yerel değişkenine erişemezsiniz. – Vampire
[Değişken zaten metot lambda'da tanımlanmıştır] 'ın olası kopyası (https://stackoverflow.com/questions/22773003/variable-is-already-defined-in-method-lambda) – ZhekaKozlov