gpt4 book ai didi

loops - 为什么 "break"结束 "loop"时不需要分号?

转载 作者:行者123 更新时间:2023-12-03 11:27:19 25 4
gpt4 key购买 nike

摘自 Chapter 3.5 rust 书:

we use the break keyword with the value counter * 2. After the loop, we use a semicolon to end the statement that assigns the value to result.


加上代码片段:
fn main() {
let mut counter = 0;

let result = loop {
counter += 1;

if counter == 10 {
break counter * 2;
}
};

println!("The result is {}", result);
}
我理解这是如何工作的以及为什么结果是 20,但我注意到如果我删除包含 break 的行上的分号关键字,程序是等价的。
为什么在这种情况下分号是可选的?

最佳答案

一个更短的例子:

let _: i32 = loop {
if true {
break 3; // ()
}
};
这只是分号不会干扰预期结果的另一个示例。其一,分号的插入引入了一个表达式语句,其计算结果为单位类型 ()。 .作为 loop s 和 if表达式继续允许评估为相同类型的代码块 () , 那么所有类型都是一致的。
let _: i32 = loop {
if true {
break 3 // !
}
};
如果去掉分号, break评估为 the never type ! ,它强制转换为任何其他类型。这意味着它将满足外部范围所期望的任何类型。所以一切都很好,只要您不尝试在 if block 结束之前附加任何其他语句。
两个 breakreturn评估为 ! ,因为它们的副作用意味着程序不会按照自然的工作流程进行。
也可以看看:
  • Why do return expressions use semicolons when they're unnecessary?
  • What's the difference between using the return statement and omitting the semicolon in Rust?
  • How to statically assert the end of a function is unreachable
  • 关于loops - 为什么 "break"结束 "loop"时不需要分号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65024479/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com