English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A função parcial aplicada Scala é uma expressão na qual você não precisa fornecer todos os parâmetros necessários para a função, apenas parte deles ou nenhum.
No exemplo a seguir, imprimimos as informações de log:
import java.util.Date object Test { def main(args: Array[String]) { val date = new Date log(date, "mensagem1" ) Thread.sleep(1000) log(date, "mensagem2" ) Thread.sleep(1000) log(date, "mensagem3" ) } def log(date: Date, message: String) = { println(date + "----" + mensagem) } }
Executar o código acima, o resultado será:
$ scalac Test.scala $ scala Test Mon Dec 02 12:52:41 CST 2018----mensagem1 Mon Dec 02 12:52:41 CST 2018----mensagem2 Mon Dec 02 12:52:41 CST 2018----mensagem3
No exemplo, o método log() recebe dois parâmetros: date e mensagem. Chamamos o programa três vezes, com valores de date iguais e mensagens diferentes.
Podemos usar funções parciais aplicadas para otimizar o método acima, vincular o primeiro parâmetro date e substituir a lista de parâmetros ausentes com o sublinhado (_) e atribuir o valor da nova função à variável. A modificação do exemplo acima é como segue:
import java.util.Date object Test { def main(args: Array[String]) { val date = new Date val logWithDateBound = log(date, _ : String) logWithDateBound("mensagem1" ) Thread.sleep(1000) logWithDateBound("mensagem2" ) Thread.sleep(1000) logWithDateBound("mensagem3" ) } def log(date: Date, message: String) = { println(date + "----" + mensagem) } }
Executar o código acima, o resultado será:
$ scalac Test.scala $ scala Test Tue Dec 18 11:25:54 CST 2018----mensagem1 Tue Dec 18 11:25:54 CST 2018----mensagem2 Tue Dec 18 11:25:54 CST 2018----mensagem3