#声明式宏 # #管道 #管道 #操作符 #表达式 #调用

pipeop

通过声明式宏将管道操作符添加到 Rust 中

10 个版本

0.2.0 2024 年 4 月 10 日
0.1.8 2024 年 3 月 12 日
0.1.7 2024 年 1 月 25 日

#21 in #声明式宏

MIT 许可证

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);

无运行时依赖项