Rust 中的Option::unwrap_or() 执行逻辑为什么出错?

前言

祝大家中秋节快乐

  • 海上生明月,天涯共此时
  • 但愿人长久,千里共婵娟

描述:

在下面示例中,期望的结果是:F-A_Value,但实际输出是 B_Value,为什么会这样?

fn test() -> String {
    let a = Some("A_Value".to_string());
    let b = a.unwrap_or( return "B_Value".to_string());
    let c = format!("F-{:?}",b);
    c.to_string()
}

fn main(){
    println!("{}", test());
}

期望

有理有据,尽可能给出参考链接,或者其他有说服力的资料, 感谢在先

阅读 2.4k
2 个回答

可以看出的是:在执行 let b = a.unwrap_or( return "B_Value".to_string()); 就直接退出执行了。也是让人觉得匪夷所思,Rust 还能这样写 return

属于可用不可行系列,下面两个示例都能执行我也感觉诧异。

// return: Value
fn test() -> String {
    Some(return "Value".to_string());
}
// return: Value
fn test() -> String {
    vec![return "Value".to_string()];
}

Rust 里 return 是一个 expression ,所以可以用在很多地方。但是,只要一执行到它,函数就返回了 ...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进