【发布时间】:2021-03-09 11:27:31
【问题描述】:
摘自 Rust Book 的Chapter 3.5:
我们使用带有值
counter * 2的break关键字。在循环之后,我们使用分号结束将值分配给result的语句。
加上代码sn-p:
fn main() {
let mut counter = 0;
let result = loop {
counter += 1;
if counter == 10 {
break counter * 2;
}
};
println!("The result is {}", result);
}
我了解它的工作原理以及为什么结果为 20,但我注意到如果我删除包含 break 关键字的行上的分号,程序是等效的。
为什么在这种情况下分号是可选的?
【问题讨论】:
-
可能是因为
break counter * 2是if块中的最终表达式。这可能会有所帮助:Are semicolons optional in rust?。我不确定break的行为究竟如何,但这通常是其他表达式会发生的情况,而且情况似乎相同。 -
我认为,
break表达式从未输入过 (github.com/rust-lang/rfcs/blob/master/text/1216-bang-type.md)。所以永远不要将类型强制转换为任何其他类型,当break是 if 块的最后一个表达式时,它会强制转换为(),这是独立表达式的类型。
标签: loops rust syntax break keyword