Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何忽略从Rust函数返回的错误并继续执行?_Rust - Fatal编程技术网

我如何忽略从Rust函数返回的错误并继续执行?

我如何忽略从Rust函数返回的错误并继续执行?,rust,Rust,当知道某段代码可能抛出错误时,我们使用try/catch块忽略此类错误并继续。这是在错误不太重要时完成的,但我们可能只想记录它: 试试看{ int i=1/0; }捕获(算术异常){ System.out.println(“遇到错误,但将继续”); } x=y; Java中的这种构造将继续执行x=y 我可以使用match来执行此构造或任何其他构造吗 我确实看到一个尝试宏,但如果方法的返回类型为Result时出错,它可能会返回 我希望在UT中使用这样的构造,以确保即使在发生错误后,它仍能继续运

当知道某段代码可能抛出错误时,我们使用
try/catch
块忽略此类错误并继续。这是在错误不太重要时完成的,但我们可能只想记录它:

试试看{
int i=1/0;
}捕获(算术异常){
System.out.println(“遇到错误,但将继续”);
} 
x=y;
Java中的这种构造将继续执行
x=y

我可以使用
match
来执行此构造或任何其他构造吗

我确实看到一个
尝试
宏,但如果方法的返回类型为
Result
时出错,它可能会返回


我希望在UT中使用这样的构造,以确保即使在发生错误后,它仍能继续运行。

Rust中可能失败的函数返回:

Result
是用于返回和传播错误的类型。它是一个包含变量的枚举,
Ok(T)
,表示成功并包含一个值;
Err(E)
,表示错误并包含一个错误值

我强烈建议您阅读:

Rust在处理出现问题的情况时有许多特点

如果要忽略错误,则有不同的可能性:

  • 不要使用
    结果

      let _ = failing_function();
    
    函数将被调用,但结果将被忽略。如果您省略了
    let=
    ,您将收到警告

  • 使用或忽略
    Result
    Err
    变量:

    您还可以将
    结果
    转换为:

  • 解开错误。但是,如果发生错误,此代码会死机:

      let ret = failing_function().unwrap();
      // or
      let ret = failing_function().expect("A panic message to be displayed");
    
试试看!()
如果发生错误,则展开结果并提前返回函数。但是,您应该使用
而不是
试试作为


另见:


也许它会回来——我建议阅读。他们花费了大量的时间和精力,涵盖了许多基本问题。感谢您将我引向参考资料@Shepmaster。但我已经经历过了。在我看来,所有的错误处理变体似乎只有在返回结果类型的情况下才起作用。但是我想处理一些与上面提到的try/catch非常类似的案例。我的函数返回一个值,而不是结果或选项类型,但可能会导致恐慌,这正是我想要忽略的。您可以使用它,但不推荐使用。Docs“不建议将此函数用于一般的try/catch机制。结果类型更适合用于可能经常失败的函数。”我认为有人否决你的问题的原因是,你不应该“扔掉”错误。正确地处理它(您可以使用
expect
)或返回它,这样调用者就可以自己处理错误。是的,谢谢@hellow指出它。但在一个UT中,我愿意这样做,不管怎样,在那里有嘲笑和东西可以绕过事情。我甚至可能继续在catch块中断言,但不想停止UT的进程。调用
Result::ok
只会将其变成一个
选项。然后你基本上得到了与
Result
Nope中相同的故事,因为rustc确实会抱怨一个未使用的结果,但它不会抱怨一个未使用的选项不确定是否有更惯用的方式告诉编译器“我故意忽略了这个结果”键入
let
很有表现力。它给编译器一个提示,即您不使用该值,其他读者(或稍后您自己)也会看到。@workerjoe
。或_else
需要返回值。如果让Ok(…)=result{…}或者{println!(…)}
或者使用
匹配result{…}
语句,则可以使用
  let opt = failing_function().ok();
  let ret = failing_function().unwrap();
  // or
  let ret = failing_function().expect("A panic message to be displayed");