Rust 如何编写显示错误并退出程序的函数的签名?
关于Rust中的错误处理有很多文章,但它们似乎都会导致返回错误对象,从而引起恐慌或类似的情况 我想检查用户输入是否有错误,所以我不能只是将其传递到堆栈中,也不能只是惊慌失措,这很难对用户友好 目前,我使用一个空的if-let和一个else块来处理这个问题,但它看起来很丑陋和笨拙。在选项和结果中的大量方便方法中,是否没有任何东西允许我调用最终方法 unwrap_或_else只是抱怨闭包返回值的类型错误Rust 如何编写显示错误并退出程序的函数的签名?,rust,Rust,关于Rust中的错误处理有很多文章,但它们似乎都会导致返回错误对象,从而引起恐慌或类似的情况 我想检查用户输入是否有错误,所以我不能只是将其传递到堆栈中,也不能只是惊慌失措,这很难对用户友好 目前,我使用一个空的if-let和一个else块来处理这个问题,但它看起来很丑陋和笨拙。在选项和结果中的大量方便方法中,是否没有任何东西允许我调用最终方法 unwrap_或_else只是抱怨闭包返回值的类型错误 use std::io::{stderr, Write}; use std::env; use
use std::io::{stderr, Write};
use std::env;
use std::process::exit;
fn error_out(e: &str) {
writeln!(&mut stderr(), "{}", e).expect(format!("Failed to print error: {}", e).as_str());
exit(1);
}
fn main() {
if let Some(filename) = env::args().nth(1) {} else {
error_out("No filename provided");
};
}
您可以添加退货类型!出错以指示它不返回。那么它的类型就无关紧要了,可以在“展开”或“其他”中调用它:
use std::process::exit;
fn error_out(e: &str) -> ! {
writeln!(&mut stderr(), "{}", e).expect(format!("Failed to print error: {}", e).as_str());
exit(1);
}
fn main() {
let filename: String = env::args().nth(1).unwrap_or_else(|| error_out("No filename provided"));
println!("{}", filename);
}