|
|
|
@ -91,6 +91,7 @@ error[E0282]: type annotations needed // 需要类型标注
|
|
|
|
|
| ^^^^^^^^^ consider giving `teams_map` a type // 给予 `teams_map` 一个具体的类型
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 所有权转移
|
|
|
|
|
|
|
|
|
|
`HashMap` 的所有权规则与其它 Rust 类型没有区别:
|
|
|
|
@ -186,6 +187,15 @@ let score: Option<&i32> = scores.get(&team_name);
|
|
|
|
|
- `get` 方法返回一个 `Option<&i32>` 类型:当查询不到时,会返回一个 `None`,查询到时返回 `Some(&i32)`
|
|
|
|
|
- `&i32` 是对 `HashMap` 中值的借用,如果不使用借用,可能会发生所有权的转移
|
|
|
|
|
|
|
|
|
|
还可以继续拓展下,上面的代码中,如果我们想直接获得值类型的 `score` 该怎么办,答案简约但不简单:
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
let score: i32 = scores.get(&team_name).copied().unwrap_or(0);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这里留给大家一个小作业: 去官方文档中查询下 `Option` 的 `copied` 方法和 `unwrap_or` 方法的含义及该如何使用。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
还可以通过循环的方式依次遍历 `KV` 对:
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|