println!("Connection erro-6ren">
gpt4 book ai didi

enums - 从函数返回内联定义的枚举?

转载 作者:行者123 更新时间:2023-11-29 08:19:31 26 4
gpt4 key购买 nike

我正在研究 Rust,我正在尝试做这样的事情:

match send("select * from User;") {
ConnError => println!("Connection error!"),
DBError(e) => println!("Database error {}", e),
Ok(response) => {
...
}
}

我正在尝试找出一种定义发送函数的紧凑方法。我看到了 Result 枚举,但它一次只处理一种错误。我希望我可以像这样定义我自己的枚举:

fn send(query: str) -> enum { Ok(Box<Response>), ConnError, DBError(str) } {
...
}

唉,这是不可能的,它在提示意外的“枚举”关键字。有没有办法做我在这里尝试的事情,或者让 Result 处理多种错误类型?谢谢!

最佳答案

正如您所说,您可以使用 Result 但您必须使用您的错误类型单独定义 enum,因为您不能直接在返回中定义它你的功能。像这样:

use std::rand::distributions::{IndependentSample, Range};

fn main() {
match send("select * from foo") {
Ok(Response) => println!("response"),
Err(e) => match e {
ConnError => println!("connection error"),
DbError(err) => println!("{}", err)
}
}
}

// the enum with your errors
enum DataLayerError {
ConnError,
DbError(String)
}

struct Response; /*...*/

fn send(_query: &str) -> Result<Response, DataLayerError> {
let between = Range::new(0u, 2);
let mut rng = std::rand::task_rng();

// return a random result
match between.ind_sample(&mut rng) {
0 => Ok(Response),
1 => Err(DbError("yikes".to_string())),
2 => Err(ConnError),
_ => unreachable!()
}
}

关于enums - 从函数返回内联定义的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25618367/

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