2015-03-07 14 views
7

Ben orada bir yöntem çağrısı f()()() görebileceğiniz bir kodScala'da çift yöntem braketlerinin amacı nedir?

object App { 
    def main(args: Array[String]) = print {CL().f()()()} 
} 

case class CL() { 
    def f()()() = 1 
} 

var. Ama eğer f()'u çalıştırırsam, aynı sonucu verir.

Scala'da f()()() ve f() arasındaki fark nedir?

cevap

10

Scala, yöntemler, çok sayıda parametre listelerini sahip olabilir:

def f(x: Int)(y: Int, z: String)(w: Boolean) = "foo" 
f(1)(2, "bar")(true) //returns "foo" 

çok sayıda parametre listelerini çeşitli nedenlerle faydalıdır. this soru hakkında daha fazla bilgi edinebilirsiniz.

da Scala, boş bir bağımsız değişken listesi, isteğe bağlı olarak ihmal edilebilir:

def f() = "foo" 
f //returns "foo" 

boş parametre listesini kullanarak seçimi genellikle geleneksel olarak yönetilir, this söz açıklandığı gibi. Birden boş argüman listeleri varsa

Yani, bunlardan herhangi atlayabilirsiniz: Bir tımar

def f()()() = "foo" 
f()()() //returns "foo" 
f()() //returns "foo" 
f() //returns "foo" 
f //returns "foo" 
+0

mi? – barbara

+0

Evet, çoklu parametre listeleri bir tür köreltme biçimidir. Scala'da curling hakkında daha fazla bilgi edinin: http://www.codecommit.com/blog/scala/function-currying-in-scala –

+0

Okuyacağım, teşekkürler. – barbara