Scala部分應用函數

當在調用一個函數時,把這個函數應用到參數中。 如果您傳遞所有預期的參數,則表示您已完全應用它。 如果只傳遞幾個參數並不是全部參數,那麼將返回部分應用的函數。這樣就可以方便地綁定一些參數,其餘的參數可稍後填寫補上。

嘗試以下,下麵是一個簡單的示例程式用來演示如何使用部分應用函數 -

import java.util.Date

object Demo {
   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 + "----" + message)
   }
}

將上述程式保存在原始檔案:Demo.scala 中,使用以下命令編譯和執行此程式。

D:/> scalac Demo.scala
D:/> scala Demo

Mon Dec 02 12:52:41 CST 2018----message1
Mon Dec 02 12:52:41 CST 2018----message2
Mon Dec 02 12:52:41 CST 2018----message3

這裏,log()方法有兩個參數:datemessage。 我們想要多次調用該方法,具有相同的日期值,但不同的消息值。可以通過將參數部分地應用到log()方法來消除將日期傳遞給每個調用的干擾。為此,首先將值綁定到date參數,並將第二個參數綁定到其位置。 結果是存儲在變數中的部分應用函數。

嘗試以下示例程式以僅使用未綁定的參數消息來調用此新方法。

import java.util.Date

object Demo {
   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 + "----" + message)
   }
}

將上述程式保存在原始檔案:Demo.scala中,使用以下命令來編譯和執行此程式。

D:\>scalac Demo.scala
D:\>scala Demo

Mon Dec 02 12:53:56 CST 2018----message1
Mon Dec 02 12:53:56 CST 2018----message2
Mon Dec 02 12:53:56 CST 2018----message3

上一篇: Scala函數 下一篇: Scala閉包