Je suis confus Comment dois-je retourner une valeur d'une fonction. J'essayais l'exemple ci-dessous:
SO COMMUE DE RETOURNER UNE STRING "VRAI" ET BOOL TRUE, mais il renvoie une chaîne "FALSE" et BOOL FAUX P>
package main
import (
"fmt"
)
func a(c bool) (string, bool) {
if c {
return "true", true
}
a(true)
return "false", false
}
func main() {
s, ok := a(false)
fmt.Println(s, ok)
}
3 Réponses :
On ne sait pas ce que vous pensez que votre code devrait faire, mais voici ce que ça fait:
Vous appelez Il vérifie si Ça appelle puis il retourne faux: p>
Cela signifie que l'étape n ° 2 est une non-op complète (et est probablement entièrement retirée entièrement par le compilateur). P> Peut-être que vous voulez faire quelque chose avec la valeur renvoyée de A code> avec la valeur false code>: p>
C code> est vrai: p>
return "false", false
A code> à nouveau, cette fois avec la valeur true code>, mais ignore complètement le résultat: p>
A (vrai) code>? p> p>
Cela entraînera une récursion de 2 niveaux. Au premier niveau, vous avez C comme faux. Ensuite, vous appelez un (vrai) et vous êtes au deuxième niveau qui retourne vrai. Maintenant, vous êtes de retour au niveau 1 à la ligne A (true) et la ligne suivante consiste à renvoyer false en tant que chaîne et bool. Vous êtes donc faux en tant que sortie finale. P>
Je pense que vous essayez d'utiliser la valeur de retour qui n'est pas le cas actuellement. P>
Votre code récursif retournera toujours "False" False lorsque C code> est faux. Veuillez consulter le code correct ci-dessous. package main
import (
"fmt"
)
func a(c bool) (string, bool) {
if c {
return "true", true
}
return a(true)
}
func main() {
s, ok := a(false)
fmt.Println(s, ok)
}
Pourquoi pensez-vous que vous allez changer la valeur de
C code>? Rien dans votre code ne change de valeur.De plus, votre appel dans
A code> àA code> est complètement ignoré.@Flimzy Fonction
A code> devrait retourner vrai, vrai mais il renvoie false, false. que tous veulent comprendrePourquoi pensez-vous que cela devrait retourner vrai? Il ne retournera que si
C code> est vrai. SiC code> est faux, il appelle ensuiteA code>, ignorant le résultat, puis renvoie false.