Rust 匹配错误结果并退出变量分配程序
我使用match语句检查赋值的函数结果。在某些情况下,我想退出程序时显示一条错误消息,如惊慌!做但是如何创建一个可以在任何地方使用的函数或宏呢 例如: 让args=匹配args::args::parse{ Okargs=>args, 错误=>someerrorbla }; 让mut statedoc=匹配state\u loader.load{ Okstates=>states, 错误=>someerrorblub }; 有些错误需要在任何地方返回工作吗?记住main可以返回结果,并且您可以在任何地方使用?-运算符:Rust 匹配错误结果并退出变量分配程序,rust,Rust,我使用match语句检查赋值的函数结果。在某些情况下,我想退出程序时显示一条错误消息,如惊慌!做但是如何创建一个可以在任何地方使用的函数或宏呢 例如: 让args=匹配args::args::parse{ Okargs=>args, 错误=>someerrorbla }; 让mut statedoc=匹配state\u loader.load{ Okstates=>states, 错误=>someerrorblub }; 有些错误需要在任何地方返回工作吗?记住main可以返回结果,并且您可以在任
fn foo() -> Result<i32, &'static str> {
Err("Nope!")
}
fn main() -> Result<(), &'static str> {
let x = 5 * foo()?;
println!("{}", x);
Ok(())
}
执行时,上面的程序只会打印错误:否!并且退出状态不等于零。为了支持更多类型的错误,您可以使用自定义枚举将这些错误和适当的实现封装到中,这样您就可以只让args=args::args::parse?;。任何错误都会冒泡到main并导致错误被打印出来。记住main可以返回结果,并且您可以在任何地方使用?-运算符:
fn foo() -> Result<i32, &'static str> {
Err("Nope!")
}
fn main() -> Result<(), &'static str> {
let x = 5 * foo()?;
println!("{}", x);
Ok(())
}
执行时,上面的程序只会打印错误:否!并且退出状态不等于零。为了支持更多类型的错误,您可以使用自定义枚举将这些错误和适当的实现封装到中,这样您就可以只让args=args::args::parse?;。任何错误都会冒泡到main并导致错误被打印出来。一种方法是使用。使用以下语法:
fn someerrormsg:&str->!{//注意这里的“->!”
eprintln!错误:{},msg;
惊恐
}
fn干线{
让r:Result=Errhello;
设x=匹配r{
Okx=>x,
Erre=>someerre,
};
println!x={},x;
}
一种方法是使用。使用以下语法:
fn someerrormsg:&str->!{//注意这里的“->!”
eprintln!错误:{},msg;
惊恐
}
fn干线{
让r:Result=Errhello;
设x=匹配r{
Okx=>x,
Erre=>someerre,
};
println!x={},x;
}
someerror不需要返回任何内容,但其实现可能会死机或打印错误并退出进程。换句话说,你可以称之为恐慌!如果你不想让你的程序死机,你可以调用eprintln!{},s;std::process::exit1;。不,Rust不会编译此文件,因为someerror的返回类型不匹配。这取决于返回类型-请参阅dianhenglau的答案。someerror不需要返回任何内容,但其实现可能会死机或打印错误并退出进程。换句话说,你可以称之为恐慌!如果你不想让你的程序死机,你可以调用eprintln!{},s;std::process::exit1;。不,Rust不会编译这个,因为someerror的返回类型不匹配。这取决于返回类型-请参阅dianhenglau的答案。但是,我必须实现每个类型。我不认为恐慌!这样做是因为它不可能知道每一种类型,但是我必须实现每一种类型。我不认为恐慌!这样做是因为它不可能知道每种类型。