Scala, açıklama değer adı vs çağrısıyla telefondu
Anladığım kadarıyla, Scala, bir işlevi de çağrılabilir
- -değer ya
- -adı
Örneğin, aşağıdaki bildirimi göz önüne alındığında, işlev çağrılır nasıl bileceğiz?
Beyan:
def f (x:Int, y:Int) = x;
Ara
f (1,2)
f (23 55,5)
f (12 3, 44*11)
Kurallar ne acaba?
CEVAP
Sadece kullanır verdiğiniz örnek-değer arayın, farkı gösteren yeni, daha basit bir örnek vereceğim.
İlk olarak, yan etkisi olan bir işlevi vardır. Bu işlev, bir şeyler yazdırır ve sonra da Int
döndürür.
def something() = {
println("calling something")
1 // return value
}
Şimdi gidiyoruz tanımlamak için iki işlevi olduğunu kabul et Int
argümanlar tam olarak aynı olması dışında bir argüman alır bir call-by-value, stil (x: Int
) ve diğer bir call-by-name tarzı (x: => Int
).
def callByValue(x: Int) = {
println("x1=" x)
println("x2=" x)
}
def callByName(x: => Int) = {
println("x1=" x)
println("x2=" x)
}
Şimdi yan etki fonksiyonu ile bunları dediğimiz zaman ne olur?
scala> callByValue(something())
calling something
x1=1
x2=1
scala> callByName(something())
calling something
x1=1
calling something
x2=1
Call-by-value sürümünde, yan etkisi geçti-işlev çağrısı (something()
) sadece bir kere oldu ama görebilirsiniz. Ancak, arama adı sürümünde, yan etkisi bu iki kez oldu.
Bu-ara-değer fonksiyonları işlevi, böylece çağırmadan önce baygın bir ifade değerini hesaplamak olmasıdıraynıdeğeri her zaman erişilebilir. Ancak, arama adı fonksiyonlarıyeniden hesaplabu erişilir geçti-ifadenin değeri her zaman.
Scala @satır içi ek açıklama performan...
Nasıl Sabit bir java bir açıklama için...
C tipi bir parametre, değer türü için ...
Nasıl bir scala dönüştürmek için.Bir j...
Kuyruk özyinelemeli fonksiyon optimize...