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

注意关于read_lineread_line这个问题的read_line属于Rust的1.0之前的版本。 关于unwrap_orunwrap_or的一般概念仍然相关。

我在为RubyistsRust的时候遇到过:

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

注意关于read_lineread_line这个答案的read_line属于Rust的1.0之前的版本。 关于unwrap_orunwrap_or的一般概念仍然相关。

因为read_line可能会失败,所以返回Option<~str> read_line Option<~str> 。 为了得到这个值,你可以使用模式匹配或者其中一种解包方法。

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

注意关于read_lineread_line这个答案的read_line属于Rust的1.0之前的版本。 关于unwrap_orunwrap_or的一般概念仍然相关。

铁锈有API文档解释这些事情。

BufferedReader.read_line

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

读取下一行input,解释为UTF-8编码的unicode码点序列。 如果遇到换行符,则换行符包含在返回的string中。

[然后提高io_error条件,这是一种情况下,它将返回None – 如果条件处理。 如果不是这样就会失败,所以你永远不会收回任何东西。]

如果读者已经阅读了所有的内容,你也会得到None


Option.unwrap

fn unwrap(self) -> T

将值从选项types中移出并返回。

主要用于获取选项types中的string,向量和唯一指针而不复制它们。

那是,

  • 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