#pattern #pattern-match #match #macro

bind_match

类似于 matches! 的便捷宏,可以将结果绑定到模式中的变量并返回一个 Option 结果

3 个版本

0.1.2 2021 年 1 月 6 日
0.1.1 2021 年 1 月 6 日
0.1.0 2021 年 1 月 3 日

2656Rust 模式

Download history 65/week @ 2024-03-30 28/week @ 2024-04-06 31/week @ 2024-04-13 44/week @ 2024-04-20 23/week @ 2024-04-27 30/week @ 2024-05-04 31/week @ 2024-05-11 19/week @ 2024-05-18 17/week @ 2024-05-25 86/week @ 2024-06-01 35/week @ 2024-06-08 31/week @ 2024-06-15 28/week @ 2024-06-22 34/week @ 2024-06-29 41/week @ 2024-07-06 83/week @ 2024-07-13

每月下载 191
3 个包中使用 (通过 narui_macros)

MIT 许可证

5KB

bind_match

类似于 matches! 的便捷宏,允许将结果绑定到模式和返回一个 Option 结果。

宏的输入看起来像这样

bind_match!(input_expr,pattern=>binding_expr)

或者带有模式守卫

bind_match!(input_expr,patternifguard=>binding_expr)

返回 binding_expr,模式中的变量被绑定。

示例

这在迭代适配器内部匹配时尤其有用。

use bind_match::bind_match;

enum Foo {
    A(Option<i32>, bool),
    B { open: bool, closed: bool },
}
struct Bar {
    foo: Foo,
    fun: bool,
}

fn fun_when_open(bars: impl IntoIterator<Item = Bar>) -> Option<bool> {
    bars.into_iter()
        .filter_map(|bar| bind_match!(bar, Bar { foo: Foo::B { open, .. }, fun } if open => fun ))
        .next()
}

无运行时依赖