Scope (Phạm vi) và Shadowing
Các ràng buộc biến đều có một phạm vi dùng để giới hạn sự tồn tại của nó trong một block (khối lệnh). Một
block là một tập hợp các câu lệnh được bao bởi dấu ngoặc nhọn {}
.
fn main() { // Ràng buộc này tồn tại trong hàm main let long_lived_binding = 1; // Đây là một block code, có scope nhỏ hơn so với hàm main { // Ràng buộc này chỉ tồn tại trong block này let short_lived_binding = 2; println!("inner short: {}", short_lived_binding); } // Kết thúc của block // Lỗi! `short_lived_binding` không tồn tại trong phạm vi này println!("outer short: {}", short_lived_binding); // FIXME ^ Comment dòng lệnh trên println!("outer long: {}", long_lived_binding); }
Variable shadowing (ẩn biến) cũng được cho phép trong Rust. Trong lập trình nói chung, variable shadowing xảy ra khi một biến được khai báo trong một phạm vi nhất định (block, method hoặc inner class) có cùng tên với một biến được khai báo trong phạm vi bên ngoài hoặc cùng phạm vi nhưng ở trước.
fn main() { // Đây là một ràng buộc biến let shadowed_binding = 1; { println!("before being shadowed: {}", shadowed_binding); // Ràng buộc này *shadows* shadowed_binding bên ngoài let shadowed_binding = "abc"; println!("shadowed in inner block: {}", shadowed_binding); } println!("outside inner block: {}", shadowed_binding); // Ràng buộc này *shadows* ràng buộc trước (let shadowed_binding = 1;) let shadowed_binding = 2; println!("shadowed in outer block: {}", shadowed_binding); }