#pipe #traits #pipeline #fp #deref-mut

no-std pipe-trait

使常规函数能够链式调用

17 个版本

0.4.0 2022年1月24日
0.3.3 2022年1月22日
0.3.2 2021年4月8日
0.3.1 2021年3月25日
0.1.11 2020年5月23日

481Rust 模式 中排名

Download history 612/week @ 2024-03-25 749/week @ 2024-04-01 797/week @ 2024-04-08 1228/week @ 2024-04-15 930/week @ 2024-04-22 808/week @ 2024-04-29 891/week @ 2024-05-06 958/week @ 2024-05-13 812/week @ 2024-05-20 1345/week @ 2024-05-27 1348/week @ 2024-06-03 1143/week @ 2024-06-10 1065/week @ 2024-06-17 1028/week @ 2024-06-24 729/week @ 2024-07-01 1167/week @ 2024-07-08

每月下载量 4,062
20 包中使用(直接使用 14 个)

MIT 许可协议

13KB
181

管道特质

Test Crates.io Version

使常规函数能够链式调用。

API

通过添加 use pipe_trait::*,为所有类型添加了 9 个方法

标识符 管道语法 传统语法
管道::管道 x.管道(f) f(x)
管道::pipe_ref x.pipe_ref(f) f(&x)
管道::pipe_mut x.pipe_mut(f) f(&mutx)
管道::pipe_as_ref x.pipe_as_ref(f) f(x.as_ref())
管道::pipe_as_mut x.pipe_as_mut(f) f(x.as_mut())
管道::pipe_deref x.pipe_deref(f) f(&x)
管道::pipe_deref_mut x.pipe_deref_mut(f) f(&mutx)
管道::pipe_borrow x.pipe_borrow(f) f(x.borrow())
管道::pipe_borrow_mut x.pipe_borrow_mut(f) f(x.borrow_mut())

阅读 文档 获取更多信息。

使用示例

相同类型

use pipe_trait::*;
let inc = |x| x + 1;
let double = |x| x + x;
let square = |x| x * x;
let a = (123i32).pipe(inc).pipe(double).pipe(square);
let b = square(double(inc(123i32)));
assert_eq!(a, b);

类型转换

use pipe_trait::*;
let x = 'x';
let a = x
    .pipe(|x| (x, x, x)) // (char, char, char)
    .pipe(|x| [x, x]) // [(char, char, char); 2]
    .pipe(|x| format!("{:?}", x)); // String
let b = "[('x', 'x', 'x'), ('x', 'x', 'x')]";
assert_eq!(a, b);

方法链中的管道

use pipe_trait::*;
fn log<X: Debug>(x: X) -> X {
    println!("value: {:?}", x);
    x
}
my_future
    .pipe(log)
    .await
    .pipe(log)
    .inc()
    .pipe(log)
    .double()
    .pipe(log)
    .square()
    .pipe(log)
    .get()
    .pipe(log);

显式类型注解

use pipe_trait::*;
let x = "abc".to_string();
let a = x
    .pipe_ref::<&str, _>(AsRef::as_ref)
    .chars()
    .pipe::<Box<_>, _>(Box::new)
    .collect::<Vec<_>>();
let b = vec!['a', 'b', 'c'];
assert_eq!(a, b);

许可证

MIT © Hoàng Văn Khải

无运行时依赖