#variables #pattern #macro #scope #assert #let #assert-matches

dev assert_matches2

assert_matches! 宏的一个版本,可以将模式中的变量引入作用域

3 个版本

0.1.2 2023 年 11 月 1 日
0.1.1 2023 年 10 月 23 日
0.1.0 2023 年 6 月 7 日

#367Rust 模式

Download history 483/week @ 2024-03-13 730/week @ 2024-03-20 412/week @ 2024-03-27 275/week @ 2024-04-03 418/week @ 2024-04-10 353/week @ 2024-04-17 439/week @ 2024-04-24 616/week @ 2024-05-01 492/week @ 2024-05-08 496/week @ 2024-05-15 698/week @ 2024-05-22 598/week @ 2024-05-29 644/week @ 2024-06-05 682/week @ 2024-06-12 757/week @ 2024-06-19 803/week @ 2024-06-26

2,986 每月下载次数
用于 15 包(14 个直接使用)

MPL-2.0 许可证

8KB

assert_matches2

assert_matches crate 的替代品,提供了一个 assert_matches! 宏,没有对 if 守卫和额外分支的支持,但在宏调用之后通过展开到 let else 将任何在模式中引入的名称引入作用域。

示例

use assert_matches2::assert_matches;

/// Basic usage
let var = serde_json::Value::from("a string");
assert_matches!(var, serde_json::Value::String(s));
assert_eq!(s, "a string");

// More complex usages
#[derive(Debug)]
struct Foo {
    bar: Bar,
}

#[derive(Debug)]
enum Bar {
    V1(u8),
    V2 { field: String },
}

let var = Foo { bar: Bar::V1(10) };
assert_matches!(var, Foo { bar: ref r @ Bar::V1(int) });
assert_matches!(r, Bar::V1(_));
assert_eq!(int, 10);

let var = Foo { bar: Bar::V2 { field: "test".to_owned() } };
assert_matches!(var, Foo { bar: Bar::V2 { field: rename } });
assert_eq!(rename, "test");

无运行时依赖