You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在类似try操作符的返回首个Some的惰性求值实现方式?

实现惰性求值的return_first_some_or_none!宏

完全可以实现,而且能完美保留你需要的惰性求值特性。直接定义如下宏即可:

macro_rules! return_first_some_or_none {
    ($($expr:expr),* $(,)?) => {
        $(
            if let Some(x) = $expr {
                return Some(x);
            }
        )*
        None
    };
}

用法说明

你可以像示例里那样调用:

return_first_some_or_none!(
  foo(),
  bar(),
);

惰性求值的保证

这个宏会把传入的每个表达式逐个展开成独立的if let分支,和你原来的手写代码逻辑完全一致。只要前面的表达式返回Some,代码就会直接return跳出,后面的表达式根本不会被执行,完全符合惰性求值的要求。

另外,宏定义里的$(,)?)是为了兼容最后一个参数后加逗号的写法,和你的示例写法匹配。

内容的提问来源于stack exchange,提问作者ajp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:09:58