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

Chamada nominal Scala

Funções Scala

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.

Funções Scala