注意,这个问题中关于
read_line
和~str
的细节涉及Rust的1.0版本之前。有关unwrap
和unwrap_or
的一般概念仍然相关。
我在阅读Rust for Rubyists时遇到了这个问题:
let mut reader = BufferedReader::new(io::stdin());
let input = reader.read_line().unwrap_or(~"nothing");
注意,这个问题中关于
read_line
和~str
的细节涉及Rust的1.0版本之前。有关unwrap
和unwrap_or
的一般概念仍然相关。
我在阅读Rust for Rubyists时遇到了这个问题:
let mut reader = BufferedReader::new(io::stdin());
let input = reader.read_line().unwrap_or(~"nothing");
注意:本答案中关于
read_line
和~str
的具体细节仅适用于Rust 1.0之前的版本。关于unwrap
和unwrap_or
的一般概念仍然相关。
Rust有API文档,其中解释了这些内容。
fn read_line(&mut self) -> Option<~str>
读取输入的下一行,解释为UTF-8编码的Unicode代码点序列。如果遇到换行符,则换行符包含在返回的字符串中。
...
[然后是关于引发io_error条件的内容,这是返回None的情况之一——如果该条件已处理。如果没有处理,它将失败,因此您将永远无法得到任何回复。]
如果读取器中的所有内容都已读取,则还会返回None
。
fn unwrap(self) -> T
从Option类型中移除一个值并返回它。
主要用于在不复制它们的情况下获取字符串、向量和唯一指针等选项类型的值。
…
也就是说,
Some(a).unwrap()
返回 a
None.unwrap()
失败fn unwrap_or(self, def: T) -> T
返回包含的值或默认值
也就是说,
Some(a).unwrap_or(b)
返回 a
None.unwrap_or(b)
返回 b
注意 此回答中关于
read_line
和~str
的细节只适用于Rust的1.0之前版本。有关unwrap
和unwrap_or
的一般概念仍然相关。
由于read_line
可能失败,因此它返回Option<~str>
。要获取其中的值,可以使用模式匹配或其中一种unwrap方法。
unwrap
和unwrap_or
之间的区别在于,如果没有值(None
),unwrap
将失败,但unwrap_or
将返回指定的默认值(在本例中为“nothing”)