x + = 1} - Retrouvez les réponses et les commentaires concernant cette question" />
Ma question concerne la fonction Scala:
val f = {() => x += 1}
Il est clair si la fonction littérale ressemble à:
val f = (x:Int)=>x+1
Mais que fait () signifie dans:
var x = 1
val f = {() => x += 1}
Je suis assez nouveau dans Scala.
J'ai déjà lu le chapitre sur les fonctions d'un livre Scala, mais je ne comprends toujours pas ce que signifie () ici.
3 Réponses :
tl; dr C'est juste une liste d'arguments vide d'une fonction.
C'est une liste d'arguments vide. Cela signifie que vous ne passez aucun argument à la fonction. Donc, normalement, ce type de fonction ne consommerait aucune valeur, mais fournirait une valeur lorsqu'elle est appelée.
Votre cas est spécial. La variable x provient de la portée externe et est liée à votre fonction afin qu'elle devienne une clôture. Chaque fois que vous invoquez f , la valeur de x sera modifiée.
Le code provient de: link class C {var acc = 0 def minc = {acc + = 1} val finc = {() => acc + = 1}} Le but est de distinguer la méthode de la fonction. Une situation dans laquelle nous devons définir une fonction avec une liste d'arguments vide? Désolé, j'apprends toujours à modifier le code en retrait.
Vous créez une fonction lorsque vous souhaitez fournir / produire une valeur à chaque fois qu'une fonction est appelée ou comme dans votre cas si vous souhaitez modifier la valeur de la variable liée à la fonction de fermeture.
Consultez cet article sur les fermetures.
Le () dans le val f = {() => x + = 1} représente la fonction ne prend aucun argument et augmente la valeur de x de 1
il est similaire à
var x = 1
def foo(): Unit = {
x += 1
}
val f: () => Unit = () => x += 1
Ce n'est pas une fonction pure
Page robot m'a dit de ne pas dire merci en commentaire. Txxxks.
dans Stackoverflow au lieu de dire merci, vous devriez: si cela a résolu votre question - vous devriez l'accepter et la marquer comme utile (+1)
f est de type () => Unité . Une fonction qui ne prend aucun argument et ne renvoie rien (Unit)
val f: () => Unit = {() => x += 1}
L'équivalent java de ceci serait le Interface Fournisseur .