gpt4 book ai didi

rust - 有没有一种方法可以简化没有宏将Option转换为Result的方法?

转载 作者:行者123 更新时间:2023-12-03 08:42:11 24 4
gpt4 key购买 nike

我有这样的东西(真正的功能是rust-iniIni::Section::get):

impl Foo {
pub fn get<K>(&'a mut self, key: &K) -> Option<&'a str>
where
K: Hash + Eq,
{
// ...
}
}

我必须多次调用它:
fn new() -> Result<Boo, String> {
let item1 = match section.get("item1") {
None => return Result::Err("no item1".to_string()),
Some(v) => v,
};
let item2 = match section.get("item2") {
None => return Result::Err("no item2".to_string()),
Some(v) => v,
};
}

为了消除代码膨胀,我可以编写一个这样的宏:
macro_rules! try_ini_get {
($e:expr) => {
match $e {
Some(s) => s,
None => return Result::Err("no ini item".to_string()),
}
}
}

没有此宏实现,是否有任何方法可以消除代码重复?

最佳答案

ok_or ok_or_else 方法将Option转换为Result,并且?运算符自动执行与早期Err返回关联的样板。

您可以执行以下操作:

fn new() -> Result<Boo, String> {
let item1 = section.get("item1").ok_or("no item1")?;
let item2 = section.get("item2").ok_or("no item2")?;
// whatever processing...
Ok(final_result)
}

关于rust - 有没有一种方法可以简化没有宏将Option转换为Result的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60854777/

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