Nae*_*mul 5 error-handling stdin rust
我找到了这个Rust代码来获取一行stdin
:
use std::io;
fn main() {
let mut line = String::new();
io::stdin().read_line(&mut line).unwrap();
println!("Input: {}", line);
}
Run Code Online (Sandbox Code Playgroud)
io::stdin().read_line(&mut line)
将line
变量设置为从中读取的行stdin
.根据我的理解,read_line()
返回一个Result
值,它可以是模式匹配的,或者.unwrap()
可以用来获取内部值,如果它不是Err
.
但是,read_line()
从不使用返回值.仅使用line
字符串变量,但.unwrap()
即使未使用,人们也会使用大部分时间.
unwrap()
如果不使用返回值,目的是什么?只是抛出一个错误?
Mat*_* M. 10
unwrap()
如果不使用返回值,目的是什么?只是抛出一个错误?
是的,但并非全部.
忽视潜在的错误是不好的; 空的line
和line
由于错误而未被读取的空间之间存在很大差异; 例如在一个外壳典型的"管道"命令,该程序需要停止时它将停止接收输入,否则用户必须杀死它.
在C中,忽略错误太容易了.许多语言通过异常来解决这个问题,但Rust没有.
为了避免困扰C程序的问题,它太容易忘记检查返回代码,通常Rust函数会捆绑预期的返回值和错误Result
,因此你必须检查它以获得返回值.
然而,还有一个潜在的问题:如果调用者不关心返回值怎么办?最值得注意的是,当价值出现时()
,没有人真正关心它.
这里调用了一些编译器魔法:Result
结构用#[must_use]
属性标记.此属性使得必须在Result
返回时执行某些操作.
因此,在您的情况下,不仅是打包好,它也是"做某事"并避免编译警告的最简单方法.