Scala fungsi currying (currying)
Currying (currying) mengacu pada fungsi asli menerima dua parameter ke fungsi baru menerima parameter proses. Sebuah fungsi baru mengembalikan parameter kedua adalah fungsi asli dari parameter.
contoh
Pertama, kita mendefinisikan fungsi:
def add(x:Int,y:Int)=x+y
Jadi ketika kita diterapkan, harus digunakan seperti ini: add (1,2)
Sekarang kita melihat bentuk perubahan fungsi ini:
def add(x:Int)(y:Int) = x + y
Jadi ketika kita diterapkan, harus digunakan seperti ini: add (1) (2), hasil akhir yang sama adalah 3, pendekatan ini (proses) disebut currying.
proses implementasi
tambahkan (1) (2) sebenarnya fungsi pada gilirannya panggilan dua biasa (fungsi non-kari), panggilan pertama menggunakan parameter x, nilai kembali dari tipe fungsi, dan parameter kedua y menyebut jenis fungsi ini nilai.
Pertama dasarnya berkembang menjadi sebuah metode:
def add(x:Int)=(y:Int)=>x+y
Maka fungsi ini adalah apa artinya? Menerima x sebagai parameter dan mengembalikan fungsi anonim, definisi fungsi anonim adalah: menerima Int argumen y, fungsi tubuh adalah x + y. Sekarang kita memanggil metode ini.
val result = add(1)
Mengembalikan Akibatnya, nilai hasil yang harus fungsi anonim: (y: Int) => 1 + y
Jadi untuk mendapatkan hasil, kami terus memanggil hasilnya.
val sum = result(2)
Akhirnya, mencetak hasil adalah 3.
contoh lengkap
Berikut ini adalah contoh lengkap:
object Test { def main(args: Array[String]) { val str1:String = "Hello, " val str2:String = "Scala!" println( "str1 + str2 = " + strcat(str1)(str2) ) } def strcat(s1: String)(s2: String) = { s1 + s2 } }
Pelaksanaan kode di atas, output adalah:
$ scalac Test.scala $ scala Test str1 + str2 = Hello, Scala!