Day 7:第三週總結練習
學習目標
- 綜合運用所有權、借用、切片
- 能避開常見的 borrow checker 錯誤
- 完成一個需要所有權思維的小程式
今日重點
本週核心心智模型
- 擁有者規則:值有唯一 owner,owner 離開範圍就釋放
- Move:賦值/傳參會轉移所有權
- Clone:明確的深拷貝(保留原值)
- Borrow:
&借用,不取所有權 - 切片:借用一段連續資料
判斷口訣
想「用」資料 → 用借用
&
想「改」資料 → 用&mut(且不能有人同時借用)
想「擁有」資料 → 用我自己的變數,或用 clone 複製一份
綜合練習:字串處理工具
// 寫一個函式:回傳字串中的第一個與最後一個字
fn first_and_last(s: &str) -> Option<(char, char)> {
let first = s.chars().next()?;
let last = s.chars().last()?;
Some((first, last))
}
fn main() {
let text = String::from("你好,Rust");
match first_and_last(&text) {
Some((f, l)) => println!("First: {}, Last: {}", f, l),
None => println!("Empty string"),
}
// 練習 1:寫一個 reverse_words(s: &str) -> String,
// 把字串的單字順序反轉("a b c" -> "c b a")
// 練習 2:寫一個 without_first_word(s: &str) -> &str,
// 回傳去掉第一個單字後的切片(借用)
}
挑戰
- 觀察為何
first_and_last用&str可以在傳入 String 後仍能繼續用text(因為是借用)。
自我檢查
- 能寫出無 borrow 錯誤的字串函式
- 理解何時 move、何時 borrow、何時 clone
- 能正確使用 Option + 切片
- 對所有權有直覺
週總結
所有權是 Rust 最核心的概念。學會後,你已經比大多只會寫腳本的開發者更懂 Rust 的精髓。