6 个稳定版本
2.1.0 | 2019 年 9 月 16 日 |
---|---|
2.0.0 | 2019 年 9 月 16 日 |
1.1.0 | 2019 年 9 月 9 日 |
1.0.2 | 2019 年 9 月 9 日 |
#1192 在 Rust 模式
2,640 每月下载量
在 2 个 crate 中使用(通过 onagre-launcher-plugins)
10KB
ward
此 crate 导出两个宏,旨在复制 Swift 的 guard 表达式的功能,与 Option<T>
。
guard!
宏是为了模拟 Swift 中的 guard let
语句而创建的。此宏仅对将值从 Option<T>
移动到变量中非常有用。另一方面,ward!
宏不会强制创建变量,它只返回 guard!
变量会放入变量的值。因此,它是 guard!
宏的更灵活版本;也许也是 Rustic 的一方面。
示例
let sut = Some("test");
// This creates the variable res, which from an Option<T> will return a T if it is Some(T), and will
// otherwise return early from the function.
guard!(let res = sut);
assert_eq!(res, "test");
与 ward!
宏相比,它只是返回值,不会强制您从它创建变量(尽管我们在这个例子中仍然这样做)
let sut = Some("test");
let res = ward!(sut);
assert_eq!(res, "test");
这两个宏也支持一个 else
分支,如果 Option<T>
是 None
,则会运行此分支
let sut = None;
guard!(let _res = sut, else {
println!("This will be called!");
// Because sut is None, the else branch will be run. When the else branch is invoked, guard!
// no longer automatically returns early for you, so you must do so yourself if you want it.
return;
});
unreachable!();
这两个宏还支持一个替代的“早期返回语句”,这可以让您在循环中执行例如 break
// Not that you couldn't (and probably should) do this case with `while let Some(res) = sut`...
let mut sut = Some(0);
loop {
let res = ward!(sut, break);
sut = if res < 5 {
Some(res + 1)
} else {
None
}
}
assert_eq!(sut, None);