Existe-t-il un sucre syntaxique pour lier une valeur dans une fonction anonyme dans Scala?
-
08-07-2019 - |
Question
Au lieu d'écrire
((x: Double) => (((y: Double) => y*y))(x+x))(3)
je voudrais écrire quelque chose comme
((x: Double) => let y=x+x in y*y)(3)
Y a-t-il quelque chose comme cette sorte de sucre syntaxique dans Scala?
La solution
En effet, cela s'appelle "" val
". : -)
({ x: Double =>
val y = x + x
y * y
})(3)
Les accolades sont bien sûr optionnelles ici, je les préfère simplement aux parenthèses lors de la définition des fonctions (après tout, ce n’est pas Lisp). Le mot clé val
définit une nouvelle liaison dans la portée lexicale actuelle. Scala n'oblige pas les sections locales à définir leur propre domaine, contrairement aux langages tels que Lisp et ML.
En fait, var
fonctionne également dans n'importe quelle portée, mais son utilisation est considérée comme un mauvais style.
Autres conseils
OK, voici le liner avec la liaison:
({ x:Double => val y = x + x; y * y })(3)
A bientôt