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

时间:2014-01-21 12:06:09

标签: rust

  

注意此问题中有关read_line~str的详细信息属于Rust的1.0之前版本。关于unwrapunwrap_or的一般概念仍然相关。

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

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

2 个答案:

答案 0 :(得分:82)

  

注意此答案中有关read_line~str的细节与Rust的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

答案 1 :(得分:59)

  

注意此答案中有关read_line~str的细节与Rust的1.0版之前有关。关于unwrapunwrap_or的一般概念仍然相关。

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

unwrapunwrap_or之间的区别在于unwrap如果没有值(None)将失败,但unwrap_or将返回指定的默认值(在这种情况下“没有”)