Fonction Scala appel par nom (call-by-name)
L'interpréteur Scala a deux façons d'analyser les arguments de fonction :
- Appel par valeur : évaluer d'abord la valeur de l'expression du paramètre, puis l'appliquer à l'intérieur de la fonction ;
- Appel par nom : appliquer directement l'expression de paramètre non évaluée à l'intérieur de la fonction
Avant d'entrer dans la fonction, l'approche d'appel par valeur a déjà fini d'évaluer l'expression du paramètre, tandis que l'appel par nom évalue l'expression du paramètre à l'intérieur de la fonction.
Cela provoque un phénomène : chaque fois que l'appel par nom est utilisé, l'interpréteur évalue l'expression une fois.
object Test {
def main(args: Array[String]) {
delayed(time());
}
def time() = {
println("获取时间,单位为纳秒")
System.nanoTime
}
def delayed( t: => Long ) = {
println("在 delayed 方法内")
println("参数: " + t)
t
}
}
Dans l'exemple ci-dessus, nous avons déclaré la méthode delayed, qui utilise le symbole => entre le nom de la variable et le type de la variable pour mettre en place l'appel par nom. L'exécution du code ci-dessus produit la sortie suivante :
$ scalac Test.scala $ scala Test 在 delayed 方法内 获取时间,单位为纳秒 参数: 241550840475831 获取时间,单位为纳秒
Dans l'exemple, la méthode delay affiche un message indiquant qu'elle est entrée dans la méthode, puis la méthode delay affiche la valeur reçue, et enfin renvoie t.
Autres extensions
Fonctions Scala