这是什么东西:有时它会被包裹有时它会被包裹


71

注意此问题中read_line~strRust的1.0之前版本有关的细节。关于unwrap并且unwrap_or仍然相关的一般概念。

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

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

Answers:


61

注意:此答案中的细节与Rust的1.0之前版本有关,read_line~str与之有关。关于unwrap并且unwrap_or仍然相关的一般概念。

因为read_line可能失败,所以返回Option<~str>。要获得价值,您可以使用模式匹配或拆包方法之一。

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


84

注意:此答案中的细节与Rust的1.0之前版本有关,read_line~str与之有关。关于unwrap并且unwrap_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

处理io_error并不是唯一的情况,您会看到read_line不返回None:我很确定,当输入达到EOF(文件结尾)时,它也返回None,而没有发出条件信号。(我确实喜欢您对Option方法的具体redex样式说明:我会考虑将其添加到文档中)
pnkfelix 2014年

@pnkfelix:您是对的。我考虑过,但由于某种原因没有写下来。已更正。
克里斯·摩根
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.