English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Функция с частичным применением в 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