部分应用功能(Partially Applied Functions)
优质
小牛编辑
135浏览
2023-12-01
当你调用一个函数时,你会说你将函数应用于参数。 如果您传递了所有预期的参数,则已完全应用它。 如果只发送一些参数,则会返回部分应用的函数。 这使您可以方便地绑定一些参数,并将其余参数留待以后填写。
试试下面的内容,它是一个简单的示例程序,用于显示部分应用的函数 -
例子 (Example)
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 。 以下命令用于编译和执行此程序。
Command
C:/>scalac Demo.scala
C:/>scala Demo
输出 (Output)
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
这里,log()方法有两个参数: date和message 。 我们想多次调用该方法,日期值相同但消息值不同。 我们可以通过将该参数部分应用于log()方法来消除将日期传递给每个调用的噪音。 为此,我们首先将值绑定到date参数,并通过在其位置放置下划线来保持第二个参数不绑定。 结果是我们存储在变量中的部分应用函数。
尝试使用以下示例程序仅使用未绑定的参数消息来调用此新方法。
例子 (Example)
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 。 以下命令用于编译和执行此程序。
Command
\>scalac Demo.scala
\>scala Demo
输出 (Output)
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