成分和管道向前操作器(like in other languages)是否都存在 rust 蚀?如果是这样的话,它们看起来是什么样的?一个应该优先于另一个?如果不存在,为什么不需要这个操作员?
成分和管道向前操作器(like in other languages)是否都存在 rust 蚀?如果是这样的话,它们看起来是什么样的?一个应该优先于另一个?如果不存在,为什么不需要这个操作员?
没有内置这样的操作符,但定义起来并不特别困难:
use std::ops::Shr;
struct Wrapped<T>(T);
impl<A, B, F> Shr<F> for Wrapped<A>
where
F: FnOnce(A) -> B,
{
type Output = Wrapped<B>;
fn shr(self, f: F) -> Wrapped<B> {
Wrapped(f(self.0))
}
}
fn main() {
let string = Wrapped(1) >> (|x| x + 1) >> (|x| 2 * x) >> (|x: i32| x.to_string());
println!("{}", string.0);
}
// prints `4`
Wrapped
新类型的 struct 纯粹是为了允许Shr
实例,因为否则我们必须在泛型(即impl<A, B> Shr<...> for A
)上实现它,这是行不通的.
注意,惯用的Rust会将其称为方法map
,而不是使用运算符.参见Option::map
以获取规范示例.