1 个稳定版本
1.0.0 | 2023 年 2 月 6 日 |
---|
#2538 在 Rust 模式
12KB
203 行
矩阵匹配
此软件包提供了一个宏,可以轻松同时匹配两个值。
该宏接受一个结果的矩阵和行与列的模式。匹配模式的交叉处的表达式被执行并可能返回。
此软件包可以在无 std 环境中使用。
示例
use matrix_match::matrix_match;
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
enum Light {
Red,
Orange,
Green,
}
fn next(light: Light, car_waiting: bool) -> Light {
use Light::*;
matrix_match!(
(light, car_waiting) ; true , false =>
Red => Green , Red ;
Orange => Red , Red ;
Green => Green , Orange ;
)
}
fn main() {
assert_eq!(next(Light::Red, true ), Light::Green);
assert_eq!(next(Light::Red, false), Light::Red);
assert_eq!(next(Light::Orange, true ), Light::Red);
assert_eq!(next(Light::Orange, false), Light::Red);
assert_eq!(next(Light::Green, true ), Light::Green);
assert_eq!(next(Light::Green, false), Light::Orange);
}
实现细节
该宏首先为行模式创建一个匹配,然后为每一行创建一个列模式的匹配。在 single-match 分支中存在一个实现,它只创建一个匹配。经过一些基准测试(也在那个分支中),确定两种实现运行时速度相当,因此选择了更简单的那个。