Question

J'ai écrit mon programme premier échantillon de scala et il ressemble à ceci:

def main(args: Array[String]) {     
    def f1 = println("aprintln")
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

La sortie est

applying f1
aprintln
()
done applying f1

Quelqu'un peut-il expliquer pourquoi le supplément () apparaît? Je pensais juste aprintln apparaîtrait.

merci,

Jeff

Était-ce utile?

La solution

Cela corrigera le problème:

def main(args: Array[String]) {         
    def f1 = println("aprintln")
    println("applying f1")
    (f1 _).apply
    println("done applying f1")
}

Et il en sera de ceci:

def main(args: Array[String]) {         
    def f1 = "aprintln"
    println("applying f1")
    println((f1 _).apply)
    println("done applying f1")
}

Qu'est-ce qui se passe ici est que vous exécutez la fonction f1 avec l'appel à apply. La f1 fonction imprime « aprintln », et retourne (). Vous passez ensuite la sortie de f1, qui est (), à un autre appel à println. Voilà pourquoi vous voyez une paire supplémentaire de Parans sur la console.

Les parenthèses vides ont l'unité de type à Scala, ce qui équivaut à annuler en Java.

Autres conseils

Les méthodes qui auraient un type de retour de vide dans Java ont un type de retour d'unité Scala. () Est la façon dont vous écrivez la valeur de l'unité.

Dans votre code, les appels f1 println directement. Ainsi, lorsque vous appelez f1 et passer le résultat à println, vous deux imprimer une chaîne dans le corps de f1 et imprimer le résultat, qui est tostring'ed comme ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top