io::stdin()
实际上是一个BufferedReader<>
包装stdin
。如您所见,in the docs,BufferedReader
提供了很多提取内容的方法。
你必须值得注意的是:
fn read_line(&mut self) -> IoResult<String>
将尝试读取从标准输入线(也可能返回一个错误)。一个简单的代码来读取int
从标准输入将是:
let a: int = from_str(io::stdin().read_line().unwrap().as_slice()).unwrap()
但它没有任何错误处理,并可以很容易失败。
更明确的办法将要求您更清洁处理事情:
let a: int = match from_str(
match io::stdin().read_line() {
Ok(txt) => txt, // Return the slice from_str(...) expects
Err(e) => { /* there was an I/O Error, details are in e */ }
}.as_slice()) /* match from_str(...) */ {
Some(i) => i, // return the int to be stored in a
None => { /* user input could not be parsed as an int */ }
};
Rust告诉我'txt'不够长,无法在第二次执行的下一个块中匹配,我怎么能通过? – 2014-09-03 20:18:19
没关系固定,as_slice()必须移动到第一个匹配语句的末尾 – 2014-09-03 20:28:10
@SyntacticFructose哦,是的,的确,好抓!我会纠正它。 – Levans 2014-09-03 20:46:08