2023-12-22|閱讀時間 ‧ 約 2 分鐘

Rust Shadowing VS 可變變數

先須知識:

  • 了解什麼是變數
  • 作用域scope

在Rust中,變數預設是不可變的

let name = "Zoe"; // 預設變數不可變

也就同於Javascript中的const,若想讓變數可變則需要在let後面加上mut關鍵字:

let mut name = "Vicky";
name = "Alicia";

看似rust的mut variable和javascript的let宣告的variable相同,但其實還有個不同之處:

rust變數不可改變型別,不可變的變數不可改,可變的變數也不可改
let mut space = "     "
space = space.len();

會出現錯誤:error[E0308]: mismatched types

Shadowing 遮蔽

let name = "Vicky"
let name = "Alicia"

在Rust中想要改變一個變數的型別,必須藉由重新宣告的方式做到。在同名變數且相同scope中,新同名變數會被使用而忽略舊同名變數值的這種機制就稱為shadow,意味著前一個變數被後一個變數給遮蔽了,新的變數佔據了前面同名變數的使用權,直到他們也被更新的同名變數遮蔽或離開scope。

let mut number = "10";
let number = number.parse();
println!(number) // 10 數字

跟js比較

javascript變數介紹

可以看到JS是不允許在同個scope中重複宣告同名變數,而Rust則允許,在Rust的使用情境多半是用在想要改變某個變數的型別時,這樣的特性能讓我們不用重複宣告類同名變數。

舉個例子而言,你的程式碼想把物件轉成陣列的形式,你無需新增各something_object跟something_array變數,只需要用一個something變數即可。


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.