位置:首頁 > 高級語言 > 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 + "----" + message)
   }
}

當上述代碼被編譯和執行時,它產生了以下結果:

C:/>scalac Test.scala
C:/>scala Test
Mon Dec 02 12:52:41 CST 2013----message1
Mon Dec 02 12:52:41 CST 2013----message2
Mon Dec 02 12:52:41 CST 2013----message3

C:/>

在這裡,log()方法有兩個參數:date和message。想調用這個方法多次,對於date使用不同的值,但message的值相同。我們可以消除部分采用的參數傳遞給log()方法傳遞的date給每個調用會有乾擾。要做到這一點,我們首先綁定一個值到date參數,並把下劃線在其位置第二個參數綁定。其結果是,我們已經存儲在一個變量的部分應用函數。現在可以與未結合的mesage參數調用這個新方法如下:

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

當上述代碼被編譯和執行時,它產生了以下結果:

C:/>scalac Test.scala
C:/>scala Test
Mon Dec 02 12:53:56 CST 2013----message1
Mon Dec 02 12:53:56 CST 2013----message2
Mon Dec 02 12:53:56 CST 2013----message3

C:/>