當在呼叫一個函式時,把這個函式應用到引數中。 如果您傳遞所有預期的引數,則表示您已完全應用它。 如果只傳遞幾個引數並不是全部引數,那麼將返回部分應用的函式。這樣就可以方便地系結一些引數,其餘的引數可稍後填寫補上。
嘗試以下,下面是一個簡單的範例程式用來演示如何使用部分應用函式 -
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