Частично применённые функции Scala

Scala 函数Функции Scala

Частично применённая функция Scala — это выражение, в котором не нужно предоставлять все аргументы, требуемые функцией; нужно предоставить только некоторые из требуемых аргументов или ни одного.

В следующем примере мы выводим информацию журнала:

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)
   }
}

Выполнение приведенного выше кода дает следующий вывод:

$ scalac Test.scala
$ scala Test
Mon Dec 02 12:52:41 CST 2018----message1
Mon Dec 02 12:52:41 CST 2018----message2
Mon Dec 02 12:52:41 CST 2018----message3

В примере метод log() принимает два параметра: date и message. Мы вызвали его три раза во время выполнения программы, каждый раз с одинаковым значением date, но разными значениями message.

Мы можем использовать частично применённую функцию, чтобы оптимизировать вышеуказанный метод, привязав первый параметр date, используя знак подчёркивания (_) для замены отсутствующего списка параметров для второго параметра, и присвоив это новое значение функции переменной. Вышеуказанный пример изменён следующим образом:

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)
   }
}

Выполнение приведенного выше кода дает следующий вывод:

$ scalac Test.scala
$ scala Test
Tue Dec 18 11:25:54 CST 2018----message1
Tue Dec 18 11:25:54 CST 2018----message2
Tue Dec 18 11:25:54 CST 2018----message3

Scala 函数Функции Scala

Другие расширения