1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2017年6月4日 |
---|
#9 in #if
在corollary中使用
9KB
253 行
iflet - 避免嵌套if let
的Rust宏
if let
是Rust中一个非常棒的概念。您可以用它来代替模式匹配,以提高可读性,如下面的极端示例所示
fn div(num: i32, denom: i32) -> Option<i32> {
if denom == 0 {
return Some(num / denom);
None
}
fn main() {
if let Some(x) = div(6, 2) {
assert_eq!(x, 3);
}
}
但是,您不能使用 if let
来匹配多个子句或带有额外的 if guards
(如 match
模式)。iflet
提供了一个宏,允许您做到这一点
#[macro_use]
extern crate iflet;
#[macro_use]
extern crate serde_json;
use serde_json::Value::{Object, Array};
fn main() {
let value = json!({
"numbers": [ 1, 2, 4, 9, 16, 25 ]
});
if_chain!([let Object(ref map) => value,
let Some(&Array(ref vec)) if !vec.is_empty() => map.get("numbers")] {
println!("there are {} numbers stored in the object", vec.len());
} else {
println!("there are no numbers stored in the object");
});
}