|
|
@ -225,7 +225,7 @@ error[E0004]: non-exhaustive patterns: `West` not covered // 非穷尽匹配,`
|
|
|
|
|
|
|
|
|
|
|
|
首先,不禁想感叹,`Rust`的编译器真**强大,忍不住爆粗口了,sorry,如果你以后进一步深入使用Rust也会像我这样感叹的。
|
|
|
|
首先,不禁想感叹,`Rust`的编译器真**强大,忍不住爆粗口了,sorry,如果你以后进一步深入使用Rust也会像我这样感叹的。
|
|
|
|
|
|
|
|
|
|
|
|
其次,Rust知道`match`中没有覆盖的具体分支,知道哪些模式没有被覆盖。这种设计的初衷是为了保证我们能处理所有的情况,特别是那种会造成十亿美金的空值问题(不太读得懂)。
|
|
|
|
其次,Rust知道`match`中没有覆盖的具体分支,知道哪些模式没有被覆盖。这种设计的初衷是为了保证我们能处理所有的情况,Rust编译器清晰地知道有哪些分支没有被覆盖。
|
|
|
|
|
|
|
|
|
|
|
|
#### `_` 通配符
|
|
|
|
#### `_` 通配符
|
|
|
|
|
|
|
|
|
|
|
@ -287,7 +287,7 @@ fn main() {
|
|
|
|
v.iter().filter(|x| x == MyEnum::Foo);
|
|
|
|
v.iter().filter(|x| x == MyEnum::Foo);
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
但是,实际上这行代码会报错,因为`x`的类型是`&&MyEnum`,无法跟类型`MyEnum`通过`==`进行比较(这里不太懂想表达什么,编译器跑了一下报了这个错误)。好在,你可以使用`match`来完成,但是会导致代码更为啰嗦,是否有更简洁的方式?答案是使用`matches!`:
|
|
|
|
但是,实际上这行代码会报错,因为你无法将`x`直接跟一个枚举成员进行比较。好在,你可以使用`match`来完成,但是会导致代码更为啰嗦,是否有更简洁的方式?答案是使用`matches!`:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|
v.iter().filter(|x| matches!(x, MyEnum::Foo));
|
|
|
|
v.iter().filter(|x| matches!(x, MyEnum::Foo));
|
|
|
|
```
|
|
|
|
```
|
|
|
|