SORU
12 Kasım 2012, PAZARTESİ


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
12 Kasım 2012, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • midomansour

    midomansour

    19 EYLÜL 2009
  • pendrop gaming

    pendrop gami

    4 ŞUBAT 2013
  • Vintendo Power

    Vintendo Pow

    2 Ocak 2007