English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala の偏適用関数

Scala の関数

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

Scala の関数