English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O interpretador Scala tem duas maneiras de analisar parâmetros de função(function arguments):
Chamada nominal(call-by-value):primeiro calcula o valor da expressão de parâmetro e então aplica dentro da função;
Chamada nominal(call-by-name):aplica diretamente a expressão de parâmetro não calculada dentro da função
Antes de entrar no corpo da função, a chamada nominal já calculou o valor da expressão de parâmetro, enquanto a chamada nominal calcula o valor da expressão de parâmetro dentro da função.
Isso cria um fenômeno, onde o interpretador calcula o valor da expressão sempre que é usado chamada nominal.
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("Obter tempo, unidade em nanossegundos") System.nanoTime } def delayed(t: => Long) = { println("Dentro do método delayed") println("Parâmetros: " + t) t } }
No exemplo acima, declaramos o método delayed Este método define o uso do sinal => para passar nomes de variáveis e tipos de variáveis. Ao executar o código acima, o resultado será o seguinte:
$ scalac Test.scala $ scala Test Dentro do método delayed Obter tempo, unidade em nanossegundos Parâmetros: 241550840475831 Obter tempo, unidade em nanossegundos
No exemplo, o método delay imprime uma mensagem indicando que entrou no método, em seguida, o método delay imprime o valor recebido e, por fim, retorna t.