English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Функция с частичным применением в 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