为啥 Rust 的示例猜谜游戏允许具有不同返回类型的 match 语句?

Posted

技术标签:

【中文标题】为啥 Rust 的示例猜谜游戏允许具有不同返回类型的 match 语句?【英文标题】:Why does Rust's example guessing game allow a match statement with varying return types?为什么 Rust 的示例猜谜游戏允许具有不同返回类型的 match 语句? 【发布时间】:2020-09-12 18:36:52 【问题描述】:

查看the intro book 的猜谜游戏示例,特别是使用match 语句执行错误处理的部分:

let guess: u32 = match guess.trim().parse() 
    Ok(num) => num,
    Err(_) => continue,
;

为什么不抱怨match 语句的不同分支具有不同的返回类型?一个返回u32,另一个执行continue 语句并且不返回任何内容。我认为要么match 语句的所有分支都必须执行代码,要么所有分支都必须返回彼此相同类型的东西。

【问题讨论】:

Ok 表示成功,并将值携带到参数中,然后返回到变量,因为 Err 携带正在处理的错误并执行提供的异常,因此继续。 本书解释它later。 【参考方案1】:

continue 的类型为 ! (AKA "never")、which can coerce into any other type,因为它不能存在任何值。

【讨论】:

以上是关于为啥 Rust 的示例猜谜游戏允许具有不同返回类型的 match 语句?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Rust 不允许在一种类型上复制和删除特征?

为啥 Rust 在 main 函数中没有返回值,以及如何返回值?

Rust 无法推断通用特征 impl 的返回类型

将机器学习应用于猜谜游戏?

为啥没有为不同的返回类型定义方法重载?

为啥 C# 在多态中不考虑函数的返回类型?