# Rust 速查

## 所有权与借用

值同一时刻只有一个所有者，赋值即转移；共享与独占两种借用不能在同一作用域并存，编译期就挡住数据竞争。想保留原变量就调用克隆方法，或者干脆改传引用，别硬扛报错。

```rust
let v = vec![1, 2];
```

## match 模式匹配

模式匹配必须穷尽所有分支，用下划线兜底；支持区间、守卫条件与元组解构，只关心一种情况时改用条件匹配更利落。匹配会移动值，想借用它时记得在模式前加引用符号。

```rust
match n { _ => () }
```

## Option 与 Result

Option 表示可能为空，Result 表示可能失败，都不允许直接当值用。问号把错误向上传播，兜底方法给默认值，比随意解包安全；库代码里尽量别用强制解包，把选择权交给调用方。

```rust
let x: Option<i32> = None;
```

## trait 与实现

trait 定义共享行为，用实现块为类型实现；派生属性可自动获得调试输出、克隆等能力，泛型参数可用约束收紧范围。想让自定义类型支持打印，派生调试能力最省事。

```rust
struct Post { title: String }
```

## 常用集合

动态数组是可变列表，哈希映射存键值，字符串可增长。下标越界会崩溃，安全访问用 get 拿到 Option 再处理；键可能已存在时用 entry 配合插入默认值更顺手。

```rust
let mut m = std::collections::HashMap::new();
```

## 错误传播与 main 返回

main 可以直接返回 Result，配合问号把错误交给运行时打印，写命令行小工具时不必手写大段匹配分支。返回 Ok 表示成功，任何一步出错都会自动提前返回并打印错误信息。

```rust
fn main() -> std::io::Result<()> { Ok(()) }
```
