ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

Rust でネストが深くなったけど未解決

前に行った into_iter() は無事動きました。何だったんだ。

今はこんな感じです。

perf_client/pdh_wrapper.rs at master · ROki1988/perf_client · GitHub

impl PdhController {
    pub fn new(path: Vec<PdhCounterPathElement>) -> Option<PdhController> {
        pdh_open_query()
            .map(|q| {
                let cs = path.into_iter()
                    .filter_map(|e| {
                        pdh_make_counter_path(&e)
                            .and_then(|p| pdh_add_counter(q, p.as_str()))
                            .map(|c| {
                                PdhCollectionItem {
                                    element: e,
                                    hcounter: c,
                                }
                            })
                            .ok()
                    })
                    .collect::<Vec<_>>();
                PdhController {
                    hquery: q,
                    hcounters: cs,
                }
            })
            .ok()
    }
}

ふかい! ふかいんだよ…
依存があるのはそうだからしかたないけど、どうにかしたい。
do 記法とか for 内包表記とかにあたるものがあれば、まだましになるはず?
相変わらず PdhController 返してるあたりが胡散臭いけど、またあと。