10 个版本
0.2.0 | 2024 年 4 月 10 日 |
---|---|
0.1.8 | 2024 年 3 月 12 日 |
0.1.7 | 2024 年 1 月 25 日 |
#21 in #声明式宏
10KB
143 行
Rust 中的管道操作符
这个包正是你所期望的,Rust 中的管道操作符。
用法
您可以通过将任何表达式和至少一个管道传递给 ::pipeop::pipe!
宏来构建一个 "管道"。您可以做一些特殊的事情,但在这个最基本的形式中,宏会尝试直接调用您的管道,并将管道中的项目作为参数。
const fn add_one(to: i32) -> i32 {
to + 1
}
let result = pipe!(1 |> add_one |> add_one);
assert!(result, 3);
在管道中的项目上调用方法
您可以通过在管道前加上一个 .
来在任何时候调用管道中的项目上的方法。
此示例使用 1
作为单一参数在管道中调用 add
方法。
use std::ops::Add;
pipe!(1 |> .add(1));
基于闭包的管道
您还可以使用闭包作为管道,因此您不必为每个简单的操作定义全新的函数。两种类型的闭包都是有效的,您可以有一个仅评估表达式的闭包,或者您也可以有一个完整的代码块。
pipe!("Hello!"
|> .to_uppercase()
|> |item| in println!("{}", item)
);
您还可以通过使用此语法使基于闭包的管道看起来更漂亮。
pipe!("Hello!"
|> .to_uppercase()
|> item in println!("{}", item)
);
当然,您可以在这个 "奇怪的闭包" 中接受一个模式。此示例通过模式匹配从管道中的 Test
实例中提取内部 bool
值。
struct Test(bool);
let result = pipe!(Test(true) |> Test(it) in it);
assert_eq!(result, true);