无涯教程-Scala - Partially Applied Functions函数

62 阅读2分钟

调用函数时,据说是将函数应用于参数。如果传递所有期望的参数,则说明已完全应用了它。如果仅发送几个参数,则将返回部分应用的函数。这使您可以方便地绑定一些参数,并在以后填充其余参数。

尝试以下操作,它是显示部分应用功能的简单示例程序-

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()方法来消除将日期传递给每个调用的麻烦。为此,我们首先将一个值绑定到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 中。以下命令用于编译和执行该程序。

命令

\>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

参考链接

www.learnfk.com/scala/parti…