在到达最后一条语句之前从函数返回可以使用“return”来完成,例如:
fn example() -> i32 {
if true {
return 1;
}
0 // this line is never reached
}
是否可以对块表达式执行类似的操作?例如:
let foo = {
if true {
*something to exit with 1*
}
0 // this line is never reached
};
谢谢你的帮助。
P.S.我知道在这个简单的例子中我可以使用“if-else”表达式。我问的是一般的块表达式,而不是这个例子:)
4条答案
按热度按时间ss2ws0br1#
在Rust 1.65.0中,可以命名块并从中断开:
在Rust 1.65.0之前,有一个众所周知的“
loop
hack”:vcirk6k62#
您也可以使用立即调用的闭包。
我敢打赌LLVM足够聪明,可以优化发布版本中的函数调用。
fwzugrvs3#
不,没有机制可以从区块中提早产生。
有趣的是,这种机制一直是proposed。尝试使用
break
-label语法(在循环中使用)执行此操作将导致以下错误:第一个
因此,这将工作在 nightly 编译器与
#![feature(label_break_value)]
。然而,我不会等待你的呼吸,它是稳定的任何时候。jmo0nnb34#
我认为目前还不可能,但我发现了这个跟踪问题:https://github.com/rust-lang/rust/issues/48594