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

Appel par nom de fonction Scala

Fonction Scala

L'interpréteur Scala a deux méthodes pour解析函数参数(function arguments) :

  • Appel par valeur (call by value)-by-value) : calcule d'abord la valeur de l'expression de paramètre, puis l'applique à l'intérieur de la fonction;

  • Appel par nom (call by name)-by-name) : applique directement l'expression de paramètre non calculée à l'intérieur de la fonction

Avant d'entrer dans le corps de la fonction, l'appel par valeur a déjà calculé la valeur de l'expression de paramètre, tandis que l'appel par nom calcule la valeur de l'expression de paramètre à l'intérieur de la fonction.

Cela cause un phénomène : chaque fois qu'un appel par nom est utilisé, l'interpréteur calcule une fois la valeur de l'expression.

object Test {
   def main(args: Array[String]) {
        delayed(time());
   }
   def time() = {
      println("Obtenir le temps, en nanosecondes")
      System.nanoTime
   }
   def delayed(t: => Long) = {
      println("À l'intérieur de la méthode delayed")
      println("Paramètres : " + t)
      t
   }
}

Dans l'exemple ci-dessus, nous avons déclaré la méthode delayed Cette méthode utilise le symbole => pour définir l'appel par nom dans le nom de la variable et le type de variable. En exécutant le code suivant, le résultat est le suivant :

$ scalac Test.scala 
$ scala Test
À l'intérieur de la méthode delayed
Obtenir le temps, en nanosecondes
Paramètres : 241550840475831
Obtenir le temps, en nanosecondes

Dans l'exemple, la méthode delay a affiché un message indiquant qu'elle est entrée dans cette méthode, puis la méthode delay a affiché la valeur reçue, et enfin a retourné t.

Fonction Scala