English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scala の偏適用関数は、関数が必要とするすべてのパラメータを提供する必要はなく、一部を提供したり、必要なパラメータを提供しないともできます。
以下の例では、ログ情報を出力します:
import java.util.Date object Test { def main(args: Array[String]) { val date = new Date log(date, "message1" ) Thread.sleep(1000) log(date, "message2" ) Thread.sleep(1000) log(date, "message3" ) } def log(date: Date, message: String) = { println(date + "----" + メッセージ) } }
以下のコードを実行すると、出力結果が:
$ scalac Test.scala $ scala Test Mon Dec 02 12:52:41 CST 2018----メッセージ1 Mon Dec 02 12:52:41 CST 2018----メッセージ2 Mon Dec 02 12:52:41 CST 2018----メッセージ3
例では、log() メソッドは date と message の2つのパラメータを受け取ります。プログラムの実行時に3回呼び出され、date の値はすべて同じですが、message は異なります。
上記のメソッドを最適化するために、偏適用関数を使用して、最初の date パラメータをバインドし、二つ目のパラメータは下線(_)で欠けているパラメータリストを置き換え、新しい関数値のインデックスを変数に割り当てます。以下の例を変更します:
import java.util.Date object Test { def main(args: Array[String]) { val date = new Date val logWithDateBound = log(date, _ : String) logWithDateBound("message1" ) Thread.sleep(1000) logWithDateBound("message2" ) Thread.sleep(1000) logWithDateBound("message3" ) } def log(date: Date, message: String) = { println(date + "----" + メッセージ) } }
以下のコードを実行すると、出力結果が:
$ scalac Test.scala $ scala Test Tue Dec 18 11:25:54 CST 2018----メッセージ1 Tue Dec 18 11:25:54 CST 2018----メッセージ2 Tue Dec 18 11:25:54 CST 2018----メッセージ3