web-dev-qa-db-fra.com

Quelle est cette chose déballer: parfois c'est déballer parfois c'est déballer_ou

Remarque Les détails de cette question concernant read_line et ~str se rapportent à une version antérieure à 1.0 de Rust. Les concepts généraux sur unwrap et unwrap_or restent pertinents.

Je l'ai rencontré en lisant Rust for Rubyists i.e .:

let mut reader = BufferedReader::new(io::stdin());
let input = reader.read_line().unwrap_or(~"nothing");
67
rofrol

Note Les détails de cette réponse concernant read_line et ~str se rapportent à une version antérieure à 1.0 de Rust. Les concepts généraux sur unwrap et unwrap_or restent pertinents.

Car read_line peut échouer, il renvoie Option<~str>. Pour obtenir la valeur, vous pouvez utiliser la correspondance de motifs ou l'une des méthodes de déballage.

La différence entre unwrap et unwrap_or est que unwrap échouera s'il n'y a pas de valeur (None) mais unwrap_or renverra la valeur par défaut spécifiée ("rien" dans ce cas)

59
Arjan

Remarque Les détails de cette réponse concernant read_line Et ~str Se rapportent à une version pré-1.0 de Rust. Les concepts généraux concernant unwrap et unwrap_or Restent pertinents.

Rust possède une documentation API qui explique ces choses.

BufferedReader.read_line :

fn read_line(&mut self) -> Option<~str>

Lit la ligne d'entrée suivante, interprétée comme une séquence de points de code Unicode codés UTF-8. Si une nouvelle ligne est rencontrée, alors la nouvelle ligne est contenue dans la chaîne retournée.

[Ensuite, quelque chose sur l'augmentation de la condition io_error, Qui est une situation dans laquelle elle retournerait None— si la condition est gérée. Si ce n'est pas le cas, cela échouera et vous ne récupérerez donc jamais rien.]

Vous obtiendrez également None retourné si tout a été lu dans le lecteur.


Option.unwrap :

fn unwrap(self) -> T

Déplace une valeur d'un type d'option et la renvoie.

Utile principalement pour extraire des chaînes, des vecteurs et des pointeurs uniques de types d'options sans les copier.

C'est,

  • Some(a).unwrap() renvoie a
  • None.unwrap() échoue

Option.unwrap_or :

fn unwrap_or(self, def: T) -> T

Renvoie la valeur contenue ou une valeur par défaut

C'est,

  • Some(a).unwrap_or(b) renvoie a
  • None.unwrap_or(b) renvoie b
83
Chris Morgan