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 中。 以下命令用于编译和执行该程序。
命令
C:/>scalac Demo.scala C:/>scala Demo
输出
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() 方法来消除将日期传递给每个调用的噪音。 为此,我们首先将一个值绑定到日期参数,并通过在其位置放置下划线来使第二个参数保持未绑定。 结果是我们存储在变量中的部分应用函数。
尝试下面的示例程序,以仅使用未绑定的参数消息调用此新方法。
示例
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 中。 以下命令用于编译和执行该程序。
命令
\>scalac Demo.scala \>scala Demo
输出
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