我有类似这样的东西(实际函数是来自rust-ini的Ini::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) => Ok(s),
None => Err("no ini item".to_string()),
}
}
}
有没有办法在不使用这个宏的情况下消除代码重复?
ok_or
和ok_or_else
的区别:传递给ok_or
的参数是急切地被求值的;如果您正在传递函数调用的结果,建议使用ok_or_else
,因为它是惰性求值的。 - MakotoEok_or()
,因为传递的参数是一个常量。 - isekaijin