1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016 年 10 月 31 日 |
---|
#104 in #panic
8KB
59 行
breaktarget
该 breaktarget
模块定义了一个类型:BreakTarget
类型。可以通过调用 BreakTarget::deploy
来获取此类型的值。
BreakTarget::deploy
接受一个 lambda 表达式,该表达式接收一个指向 BreakTarget
的引用。此对象定义了一个方法,break_with
,它接受一个类型为 T
的值并返回到 BreakTarget::deploy
调用的位置,产生该值作为结果。如果 lambda 表达式正常退出,它还必须产生一个类型为 T
的值,该值作为 BreakTarget::deploy
调用的结果。
重要说明
非局部跳转是通过 panic 来回滚堆栈实现的。在此回滚过程中关闭的所有互斥锁都将被毒化,以及其他回滚特定效果。
如果启用了 panic = "abort"
,对 break_with
的调用将中止程序
示例
use breaktarget::Breaktarget;
let result = BreakTarget::deploy(|target| {
// ... Some logic here
target.break_with(10i32);
// ... Some logic here
});
assert_eq!(result, 10i32);
use breaktarget::BreakTarget;
fn some_function(target: &BreakTarget<i32>, cond: bool) {
if cond {
target.break_with(10);
}
}
let result1 = BreakTarget::deploy(|target| {
some_function(target, false);
20
});
assert_eq!(result1, 20);
let result2 = BreakTarget::deploy(|target| {
some_function(target, true);
20
});
assert_eq!(result2, 10);