私はこのようなものを持っています(実際の機能は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
にSをResult
S、及び?
オペレータが早期に関連付けられた定型自動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)
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加