作用域
本集目標
了解大括號 {} 創造的「範圍」,以及為什麼變數出了大括號就不能用了。
正文
這集來聊一個很重要的概念——作用域(scope)。
什麼是作用域?
你可以把大括號 {} 想成一個房間。在房間裡面建立的東西,出了房間就看不到了。
來看這個例子:
fn main() {
{
let y = 10;
println!("{}", y);
}
}
到這裡都沒問題。
出了大括號會怎樣?
現在試著在大括號外面用 y:
fn main() {
{
let y = 10;
println!("{}", y);
}
println!("{}", y); // 這行會出錯!
}
你會得到一個編譯錯誤,Rust 在跟你說:「我找不到 y 這個東西。」
為什麼?因為 y 是在那對大括號裡面建立的,一出了大括號,y 就不見了。就像你在一個房間裡放了一張椅子,關上門之後,走廊上是看不到那張椅子的。
為什麼要有作用域?
這其實是一件好事。它讓你的變數不會在不該出現的地方亂跑。想像一下如果每個變數在程式的任何地方都能用,那程式一大起來就會超級混亂。作用域幫你把東西整理得有條有理。
不只是獨立的大括號
上一集教的 if 也有大括號對吧?其實 if 的大括號也是一個作用域,外面看不到裡面的變數。之後我們會學到迴圈、函數等等,只要看到 {},裡面就是一個作用域。這是 Rust 裡面一個很統一的規則。
重點整理
- 每對大括號
{}都會建立一個作用域(scope) - 在作用域裡建立的變數,出了
{}就消失、不能再用 if和其他帶有{}的語法都會形成作用域