-4
votes

Quelle est la bonne façon de revenir de la fonction?

Je suis confus Comment dois-je retourner une valeur d'une fonction. J'essayais l'exemple ci-dessous:

  • passer false à fonctionner a li>
  • la valeur de c sera fausse dans la fonction A LI>
  • Il effectuera un appel récursif et cela modifiera la valeur de C de FALSE à TRUE LI>
  • 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)
    }
    


4 commentaires

Pourquoi pensez-vous que vous allez changer la valeur de C ? Rien dans votre code ne change de valeur.


De plus, votre appel dans A à A est complètement ignoré.


@Flimzy Fonction A devrait retourner vrai, vrai mais il renvoie false, false. que tous veulent comprendre


Pourquoi pensez-vous que cela devrait retourner vrai? Il ne retournera que si C est vrai. Si C est faux, il appelle ensuite A , ignorant le résultat, puis renvoie false.


3 Réponses :


0
votes

On ne sait pas ce que vous pensez que votre code devrait faire, mais voici ce que ça fait:

  1. Vous appelez A code> avec la valeur false code>: p>

    Il vérifie si C code> est vrai: p>

    return "false", false
    
  2. Ça appelle A code> à nouveau, cette fois avec la valeur true code>, mais ignore complètement le résultat: p> XXX PRE> LI>

  3. puis il retourne faux: p> XXX PRE> LI> ol>

    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 (vrai) code>? p> p>


0 commentaires

0
votes

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.

Je pense que vous essayez d'utiliser la valeur de retour qui n'est pas le cas actuellement.


0 commentaires

3
votes

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)
}


0 commentaires