• [^] # Re: Merci !

    Posté par . En réponse au journal Portage de TapTempo en Ada. Évalué à 2.

    Je pense que si je fais un journal, je ne vais pas garder ces lignes, c'est un peu moche.

    Pour expliquer vite fait, le résultat de reader.next() est un Option<Result<String, Error>>, c'est-à-dire qu'on pourrait avoir ou pas un résultat (Option est un type optionnel, comme Maybe en Haskell). On n'a pas de résultat quand l'utilisateur fait un CTRL+D sur une ligne vide par exemple.

    Du coup, le unwrap_or sert à dire: "récupère le contenu de l'option, ou prend la valeur Ok("q".into()) comme valeur par défaut si on n'a pas de valeur dedans".

    Donc on a un type Result<String, Error> à ce moment. Il vaut soit Ok(String) si tout s'est bien passé, soit Err(Error) si il y a eu un problème. map_err sert à changer le type dans Err ; et map sert à changer le type de Ok.

    Si on écrivait tout ça en plus verbeux, ça donnerait:

    match reader.next() {
     None => false,
     Some(res) => match res {
     Ok(s) => Ok(s != "q"),
     Err(e) => Err(format!("{}", e)),
     }
    }