17 个版本
0.4.0 | 2022年1月24日 |
---|---|
0.3.3 |
|
0.3.2 | 2021年4月8日 |
0.3.1 | 2021年3月25日 |
0.1.11 | 2020年5月23日 |
481 在 Rust 模式 中排名
每月下载量 4,062
在 20 个 包中使用(直接使用 14 个)
13KB
181 行
管道特质
使常规函数能够链式调用。
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);