于2017-07-06由小牛君创建
当调用函数,可以认为是将参数传给函数。通过所有希望的参数并完全把它传到应用。如果只发送了几个参数,会得到一个部分函数应用。也可以绑定一些参数,剩下其余的稍后再填补上。下面是一个简单的例子来说明这一概念:
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:/>
在线咨询
免费热线
资料发放
技术答疑
关注微信