never类型
Never类型 !
表示永远不会解析为任何值的计算。
附加信息
break
, continue
和 return
表达式的类型也是 !
。例如,我们可以这样写:
let x: ! = {
return 123
};
虽然这里的 let
语句看似无意义,但它有助于理解 !
的概念。因为 return
返回整个函数,所以 x
永远不会被赋值,因此它可以被赋予永不类型 !
。我们还可以用 revert()
或无限循环的 loop
替换 return 123
,这段代码依然有效。
更现实地使用 Never
类型的例子如下:
let num: u32 = match get_a_number() {
Some(num) => num,
None => break,
};
两个匹配分支都必须产生 u32
类型的值,但是由于 break
根本不会产生任何值,我们知道它永远不会产生一个不是 u32
类型的值。这展示了 !
类型的另一特性——!
类型的表达式可以强制转换为任何其他类型。
需要注意的是,!
类型可以强制转换为任何其他类型,另一个例子是:
let x: u32 = {
return 123
};
无论 x
的类型是什么,Never
类型的返回块总是能够强制转换为 x
的类型。
例子
fn foo() {
let num: u64 = match Option::None::<u64> {
Some(num) => num,
None => return,
};
}