地址:https://practice-zh.course.rs/variables.html
🌟 變量只有在初始化后才能被使用
// 修復下面代碼的錯誤并盡可能少的修改
fn main() {let x: i32; // 未初始化,但被使用let y: i32; // 未初始化,也未被使用println!("x is equal to {}", x);
}
x初始化即可。
// 修復下面代碼的錯誤并盡可能少的修改
fn main() {let x: i32 = 1; // 未初始化,但被使用let y: i32; // 未初始化,也未被使用println!("x is equal to {}", x);
}
🌟🌟 可以使用 mut 將變量標記為可變
// 完形填空,讓代碼編譯
fn main() {let __ = 1;__ += 2; println!("x = {}", x);
}
聲明mut x即可
// 完形填空,讓代碼編譯
fn main() {let mut x = 1;x += 2; println!("x = {}", x);
}
🌟 作用域是一個變量在程序中能夠保持合法的范圍
// 修復下面代碼的錯誤并使用盡可能少的改變
fn main() {let x: i32 = 10;{let y: i32 = 5;println!("x 的值是 {}, y 的值是 {}", x, y);}println!("x 的值是 {}, y 的值是 {}", x, y);
}
y的作用域僅限大括號內部(對C++程序員可太熟悉了),所以去掉即可。
// 修復下面代碼的錯誤并使用盡可能少的改變
fn main() {let x: i32 = 10;{let y: i32 = 5;println!("x 的值是 {}, y 的值是 {}", x, y);}println!("x 的值是 {}", x);
}
🌟🌟 若后面的變量聲明的名稱和之前的變量相同,則我們說:第一個變量被第二個同名變量遮蔽了( shadowing )
// 只允許修改 `assert_eq!` 來讓 `println!` 工作(在終端輸出 `42`)
fn main() {let x: i32 = 5;{let x = 12;assert_eq!(x, 5);}assert_eq!(x, 12);let x = 42;println!("{}", x); // 輸出 "42".
}
本作用域內的值遮蓋了外部的變量:
// 只允許修改 `assert_eq!` 來讓 `println!` 工作(在終端輸出 `42`)
fn main() {let x: i32 = 5;{let x = 12;assert_eq!(x, 12);}assert_eq!(x, 5);let x = 42;println!("{}", x); // 輸出 "42".
}
🌟🌟 修改一行代碼以通過編譯
fn main() {let mut x: i32 = 1;x = 7;// 遮蔽且再次綁定let x = x; x += 3;let y = 4;// 遮蔽let y = "I can also be bound to text!";
}
再次聲明的x和之前不是一個東西,所以要重新mut
fn main() {let mut x: i32 = 1;x = 7;// 遮蔽且再次綁定let mut x = x; x += 3;let y = 4;// 遮蔽let y = "I can also be bound to text!";
}
使用以下方法來修復編譯器輸出的 warning :
🌟 一種方法
🌟🌟 兩種方法
fn main() {let x = 1;
}
第一種就是改為_x,第二種就是隨便使用下x(比如輸出)
🌟🌟 我們可以將 let 跟一個模式一起使用來解構一個元組,最終將它解構為多個獨立的變量
// 修復下面代碼的錯誤并盡可能少的修改
fn main() {let (x, y) = (1, 2);x += 2;assert_eq!(x, 3);assert_eq!(y, 2);
}
在元組里再聲明mut即可
// 修復下面代碼的錯誤并盡可能少的修改
fn main() {let (mut x, y) = (1, 2);x += 2;assert_eq!(x, 3);assert_eq!(y, 2);
}