Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

作用域

本集目標

了解大括號 {} 創造的「範圍」,以及為什麼變數出了大括號就不能用了。

正文

這集來聊一個很重要的概念——作用域(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 和其他帶有 {} 的語法都會形成作用域