x + = 1} - Retrouvez les réponses et les commentaires concernant cette question" />
2
votes

Que signifie "()" dans: val f = {() => x + = 1}

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.


0 commentaires

3 Réponses :


6
votes

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.


3 commentaires

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.



6
votes

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


2 commentaires

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)



2
votes

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 .


0 commentaires