注意此问题中有关
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");
答案 0 :(得分:82)
注意此答案中有关
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
将值移出选项类型并返回它。
主要用于从选项类型中获取字符串,向量和唯一指针而不复制它们。
...
即,
Some(a).unwrap()
返回a
None.unwrap()
失败
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版之前有关。关于unwrap
和unwrap_or
的一般概念仍然相关。
由于read_line
可能会失败,因此会返回Option<~str>
。要获得该值,您可以使用模式匹配或其中一种解包方法。
unwrap
和unwrap_or
之间的区别在于unwrap
如果没有值(None
)将失败,但unwrap_or
将返回指定的默认值(在这种情况下“没有”)