什么是这个解开的东西:有时它会展开,有时它是unwrap_or

rof*_*rol 67 rust

注意:在这个问题的细节方面read_line,并~str涉及到预先1.0版本锈病.关于unwrapunwrap_or保持相关的一般概念.

我在为Rubyists阅读Rust时遇到过它,即:

let mut reader = BufferedReader::new(io::stdin());
let input = reader.read_line().unwrap_or(~"nothing");
Run Code Online (Sandbox Code Playgroud)

Chr*_*gan 83

注意在这个答案的细节有关read_line,并~str涉及到预先1.0版本锈病.关于unwrapunwrap_or保持相关的一般概念.

Rust有API文档解释这些东西.

BufferedReader.read_line:

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

读取下一行输入,解释为UTF-8编码的unicode代码点序列.如果遇到换行符,则换行符包含在返回的字符串中.

...

[然后关于提高io_error条件的事情,这是一种情况,None如果条件被处理,它将返回.如果它不是它会失败,所以你永远不会得到任何回报.]

None如果在阅读器中读取了所有内容,您也将被退回.


Option.unwrap:

fn unwrap(self) -> T

将值移出选项类型并返回它.

主要用于从选项类型中获取字符串,向量和唯一指针而不复制它们.

...

那是,

  • Some(a).unwrap() 回报 a
  • None.unwrap() 失败

Option.unwrap_or:

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

返回包含的值或默认值

那是,

  • Some(a).unwrap_or(b) 回报 a
  • None.unwrap_or(b) 回报 b


Arj*_*jan 60

注意在这个答案的细节有关read_line,并~str涉及到预先1.0版本锈病.关于unwrapunwrap_or保持相关的一般概念.

因为read_line可能会失败它返回Option<~str>.要获得该值,您可以使用模式匹配或其中一种解包方法.

如果没有值()但是将返回指定的默认值(在这种情况下为"无" ),则unwrap和之间的差异将失败unwrap_orunwrapNoneunwrap_or