gpt4 book ai didi

error-handling - 如何手动返回一个Result<(), Box>?

转载 作者:行者123 更新时间:2023-11-29 07:49:28 25 4
gpt4 key购买 nike

我想在条件为真时从函数返回错误:

use std::error::Error;

pub fn run() -> Result<(), Box<dyn Error>> {
// -- snip ---

if condition {
// return error
}

// -- snip --

Ok(())
}

fn main() {}

我可能没有掌握类型系统的基础知识,但我看到到处都有人使用 ? 运算符,所以我不知道要返回什么类型。

  1. 是否可以只返回这样的错误?
  2. 有没有更好的方法来处理这个逻辑?

最佳答案

Error 是一个特征,你想返回一个特征对象(注意 dyn keyword ),所以你需要实现这个特征:

use std::error::Error;
use std::fmt;

#[derive(Debug)]
struct MyError(String);

impl fmt::Display for MyError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "There is an error: {}", self.0)
}
}

impl Error for MyError {}

pub fn run() -> Result<(), Box<dyn Error>> {
let condition = true;

if condition {
return Err(Box::new(MyError("Oops".into())));
}

Ok(())
}

fn main() {
if let Err(e) = run() {
println!("{}", e); // "There is an error: Oops"
}
}

我建议你使用 failure删除所有错误样板文件:

#[derive(Fail, Debug)]
#[fail(display = "There is an error: {}.", _0)]
struct MyError(String);

--

请注意,如果您期望一个Error,您可以返回任何您想要的类型,前提是它实现了Error。这包括 std 中的错误类型。

关于error-handling - 如何手动返回一个Result<(), Box<dyn Error>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51550167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com