Rust 匹配错误结果并退出变量分配程序

Rust 匹配错误结果并退出变量分配程序,rust,Rust,我使用match语句检查赋值的函数结果。在某些情况下,我想退出程序时显示一条错误消息,如惊慌!做但是如何创建一个可以在任何地方使用的函数或宏呢 例如: 让args=匹配args::args::parse{ Okargs=>args, 错误=>someerrorbla }; 让mut statedoc=匹配state\u loader.load{ Okstates=>states, 错误=>someerrorblub }; 有些错误需要在任何地方返回工作吗?记住main可以返回结果,并且您可以在任

我使用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的答案。但是,我必须实现每个类型。我不认为恐慌!这样做是因为它不可能知道每一种类型,但是我必须实现每一种类型。我不认为恐慌!这样做是因为它不可能知道每种类型。