7 个版本 (3 个稳定版)
使用旧的 Rust 2015
1.0.2 | 2021 年 8 月 21 日 |
---|---|
1.0.1 | 2020 年 9 月 29 日 |
1.0.0 | 2019 年 5 月 22 日 |
0.1.3 | 2018 年 7 月 20 日 |
0.1.1 | 2016 年 12 月 29 日 |
55 在 Rust 模式 中
每月 889,094 次下载
在 809 个 包(65 个直接)中使用
10KB
139 行
if_chain
此包提供了一个名为 if_chain!
的单个宏。
if_chain!
允许您编写长链嵌套的 if
和 if let
语句,而不会出现相关的向右偏移。它还支持多个模式(例如,if let Foo(a) | Bar(a) = b
),在 Rust 通常不允许这些模式的地方。
lib.rs
:
此包提供了一个名为 if_chain!
的单个宏。
if_chain!
允许您编写长链嵌套的 if
和 if let
语句,而不会出现相关的向右偏移。它还支持多个模式(例如,if let Foo(a) | Bar(a) = b
),在 Rust 通常不允许这些模式的地方。
有关此包的背景信息,请参阅相关的博客文章。
递归限制的说明
如果您在使用此宏时遇到“递归限制已达到”的错误,请尝试将以下内容添加到您的包顶部:
#![recursion_limit = "1000"]
。
示例
快速入门
if_chain! {
if let Some(y) = x;
if y.len() == 2;
if let Some(z) = y;
then {
do_stuff_with(z);
}
}
变为
if let Some(y) = x {
if y.len() == 2 {
if let Some(z) = y {
do_stuff_with(z);
}
}
}
使用 else
添加回退值
if_chain! {
if let Some(y) = x;
if let Some(z) = y;
then {
do_stuff_with(z)
} else {
do_something_else()
}
}
变为
if let Some(y) = x {
if let Some(z) = y {
do_stuff_with(z)
} else {
do_something_else()
}
} else {
do_something_else()
}
使用 let
添加中间变量
if_chain! {
if let Some(y) = x;
let z = y.some().complicated().expression();
if z == 42;
then {
do_stuff_with(y);
}
}
变为
if let Some(y) = x {
let z = y.some().complicated().expression();
if z == 42 {
do_stuff_with(y);
}
}
类型注解
let mut x = some_generic_computation();
if_chain! {
if x > 7;
let y: u32 = another_generic_computation();
then { x += y }
else { x += 1 }
}
变为
let mut x = some_generic_computation();
if x > 7 {
let y: u32 = another_generic_computation();
x += y
} else {
x += 1
}
多个模式
if_chain! {
if let Foo(y) | Bar(y) | Baz(y) = x;
let Bubbles(z) | Buttercup(z) | Blossom(z) = y;
then { do_stuff_with(z) }
}
变为
match x {
Foo(y) | Bar(y) | Baz(y) => match y {
Bubbles(z) | Buttercup(z) | Blossom(z) => do_stuff_with(z)
},
_ => {}
}
请注意,如果您使用的是普通 let
,则 if_chain!
假设该模式是 不可反驳的(总是匹配),并且不会添加回退分支。