Scala 部分应用函数

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。我们想要多次调用方法,对于date参数保持相同的值,但对于message参数使用不同的值。为了消除每次调用都传递date的噪音,我们可以通过将该参数部分应用于log()方法来解决。为此,我们先绑定一个值到date参数,然后在第二个参数的位置上放置一个下划线来保持其未绑定。结果是一个部分应用的函数,我们将其存储在一个变量中。

尝试以下示例程序,只使用未绑定的参数message调用这个新方法。

示例

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程