以下の内容はhttps://hiratara.hatenadiary.jp/entry/2026/02/23/210257より取得しました。


flat_map と inspect_err

gemini CLI に書いてもらったコード。

                Ok(records_iter
                    .filter_map(|res| match res {
                        Ok(val) => Some(val),
                        Err(e) => {
                            warn!("Failed to read record: {:?}", e);
                            None
                        }
                    })
                    .collect::<HashMap<_, _>>())

ダサいから書き直してよと言ったら、こうなった。これはカッコよい。

                Ok(records_iter
                    .flat_map(|res| res.inspect_err(|e| warn!("Failed to read record: {:?}", e)))
                    .collect())

まず、 Result 型はイテレータを実装しており、 Ok なら 1 要素、 Err なら 0 要素を返す。よって、 flat_mapOk だけを取り出せる。

    #[inline]
    fn into_iter(self) -> IntoIter<T> {
        IntoIter { inner: self.ok() }
    }

内部で .ok() を呼んでいるので、これだけだと Err は捨てられてしまう。そこで、 .flat_map される直前に .inspect_err で中身を確認する。

素晴らしい。




以上の内容はhttps://hiratara.hatenadiary.jp/entry/2026/02/23/210257より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14