Eğlenmek için bir programlama dili modelliyorum ve sözdizimi Scala'ya özgü işlev tanımlarından büyük ölçüde etkileniyor.
Benim dilim çünkü bir tasarım sorunla karşılaştık ayrım yapmaz aracılığıyla tanımlanmış fonksiyonlar arasında def
(kullanılarak oluşturulan sözdizimi (sınıf yöntemleri) ve değerler atanmış anonim işlevlerin =>
) - bu hem farklılıklarını ortadan kaldırır uygulanması ve davranış .
Sonuç olarak, aşağıdaki iki tanım aynı anlama gelir:
def square(x: Int) = x*x
val square = (x: Int) => x*x
İkinci formun (anonim işlev ataması) herhangi bir normal durumda kullanılmasının bir nedeni yoktur - form yerine formun kullanılması mümkündürdef
.
Adlandırılmış işlevleri tanımlamak için bu tür yinelenen bir sözdizimine sahip olmak, dilin dikgenliğine veya başka bir tasarım yönüne zarar verir mi?
Bu çözümü tercih ediyorum, çünkü yöntemlerin ve adlandırılmış işlevlerin kısa ve sezgisel tanımlarına (üzerinden def
) ve anonim işlevlerin kısa tanımlarına (kullanarak =>
) izin verir.
Düzenleme: Scala iki anonim fonksiyonları arasında ayrım yapar Scala ile tanımlanan yöntemlerle aynı değildir def
. Farklılıklar göreceli olarak incedir - daha önce bağladığım gönderilere bakın.
val
Gösterimini kullanarak özyinelemeli işlevleri tanımlayabilir misiniz ?
fun
özyinelemeli bir işlevi tanımlamak için kullanmanız gerekir.
def
. Anonim bir işlevin, örneğin (x : Int) => x + 1
bir nesne olduğu ve nesnelere değerlerle atanabilmesinin sadece bir yan etkisi val f = ...
. Dil tasarımcıları sözdizimine izin vermemek için kendi yollarından çıkmak zorunda kalacaklardı . Aynı şeyi yapan (yaklaşık olarak) iki farklı sözdizimini destekleme çabasını açıkça ortaya koymakla aynı şey değildir.
However, assigning existing functions
cümlenin sonu eksik gibi görünüyor