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