當在調用一個函數時,把這個函數應用到參數中。 如果您傳遞所有預期的參數,則表示您已完全應用它。 如果只傳遞幾個參數並不是全部參數,那麼將返回部分應用的函數。這樣就可以方便地綁定一些參數,其餘的參數可稍後填寫補上。
嘗試以下,下麵是一個簡單的示例程式用來演示如何使用部分應用函數 -
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()
方法有兩個參數:date
和message
。 我們想要多次調用該方法,具有相同的日期值,但不同的消息值。可以通過將參數部分地應用到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