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)),
}
}
[^] # Re: Merci !
Posté par Boiethios . 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 unOption<Result<String, Error>>, c'est-à-dire qu'on pourrait avoir ou pas un résultat (Option est un type optionnel, commeMaybeen 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_orsert à dire: "récupère le contenu de l'option, ou prend la valeurOk("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 soitOk(String)si tout s'est bien passé, soitErr(Error)si il y a eu un problème.map_errsert à changer le type dansErr; etmapsert à changer le type deOk.Si on écrivait tout ça en plus verbeux, ça donnerait: