Rust 中的 |
用途比较多,这里做一个简单的整理。
在模式匹配(如 match
语句或 if let
表达式)中, |
可以用来表示多个模式的组合:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| fn process_keypress(&mut self) -> Result<(), std::io::Error> {
let pressed_key = read_key()?;
if let Key::Ctrl('q') | Key::Ctrl('x') = pressed_key {
self.should_quit = true;
}
// 和下面这句等价:
match pressed_key {
Key::Ctrl('q') | Key::Ctrl('x') => self.should_quit = true,
_ => (),
}
// ...
Ok(())
}
|
在 Rust 的闭包中, 我们在两个 |
之间定义闭包的参数:
1
2
| let add_one = |x| x + 1;
let result = add_one(5);
|
参数可以有多个,也可以留空。
严格意义来说,在闭包中的用法不是操作符,应该算是 Rust 语法的一部分。
这个比较简单,和其他语言中一致:
1
2
3
| let a = 0b1010;
let b = 0b1100;
let c = a | b;
|
这个也跟其他语言一样,用于连接两个布尔表达式:
1
2
3
4
5
6
7
8
| let a = true;
let b = false;
if a || b {
println!("至少一个条件为真");
} else {
println!("两个条件都为假");
}
|
在使用泛型和 trait 时, |
可以用于指定类型必须实现多个 trait 中的任意一个(目前这个用法还在实验阶段,需要在 Cargo.toml 中启用特定的特性):
1
2
3
| fn do_something<T: Display | Debug>(value: T) {
// ...
}
|
在这个例子中, T
类型参数必须实现 Display
或 Debug
trait 中的至少一个。