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

Rust中如何在获取None时提前返回且避免使用unwrap?

解决方案

你可以使用Rust 1.65及以上版本支持的let ... else语句,这是最简洁的实现方式,无需显式的if或match判断,直接完成None分支的返回和Some值的解包绑定:

async fn found_player(id: u64, repo: &Repo) -> Result<Option<Player>, DbError> {
    // 匹配成功则将Player实例绑定到player变量,失败则直接返回Ok(None)
    let Some(player) = repo.player_by_id(id).await? else {
        return Ok(None);
    };

    // 后续代码直接使用已解包的player,无需调用unwrap
    player.update_last_active().await?;
    // 其他业务逻辑...

    Ok(Some(player))
}

说明

let ... else是Rust专门为这种“模式匹配成功则绑定变量,失败则执行退出逻辑”的场景设计的语法,它不属于if或match表达式范畴,完全符合你的需求:

  1. 遇到None时直接返回Ok(None),无需额外判断
  2. Some中的Player实例会被直接绑定到player变量,后续代码可直接使用,无需手动解包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:05:22