这个展开的东西是什么: 有时候是展开,有时候是展开

注意: 本问题中关于 read_line~str的细节与 Rust 的1.0版本之前的版本有关。关于 unwrapunwrap_or的一般概念仍然相关。

我在阅读 红宝石爱好者之锈时遇到过这种情况,例如:

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

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

因为 read_line可能会失败,所以它返回 Option<~str>。为了得到值,你可以使用模式匹配或者取消包装的方法。

unwrapunwrap_or的区别在于,如果没有值(None) ,unwrap将失败,但是 unwrap_or将返回指定的默认值(在本例中为“无”)

注意: 这个答案中关于 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

将值移出选项类型并返回。

主要用于从选项类型中获取字符串、向量和唯一指针而无需复制它们。

...

就是,

  • 返回 a
  • None.unwrap()失败

Option.unwrap_or :

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

返回包含的值或默认值

就是,

  • 返回 a
  • 返回 b