Rust(1) - Variable, Mutability and Constant
討論一下 Rust 中 Mutability 和 Constant 的用法。
1. Mutability:
Rust 變數分成可變的跟不可變的,舉個例子:
fn main() {
let n = 199;
println!("n: {}", n);
n = n + 1;
println!("n: {}", n);
}
Rust 預設變數是不可變的。上面我們定義了一個不可變的變數 n ,編譯時編譯器會報錯 cannot assign twice to immutable variable
利用 mut 關鍵字宣告變數:
fn main() {
let mut n = 199;
println!("n: {}", n);
n = n + 1;
println!("n: {}", n);
}
2. 變數型別:
宣告時可以寫明變數的型別,如果沒寫編譯器會自行推導。
下面宣告一個變數 n ,型別為 unsigned int 8 (8 bits)。Rust 的數字有 8, 16, 32, 64 等長度。
fn main() {
let n: u8 = 199;
println!("n: {}", n);
}
Rust 可以在 compile 時檢查數值是否超出範圍,i8 最大為 127 所以編譯時會報錯。
fn main() {
let n: i8 = 199;
println!("n: {}", n);
}
3. Shadowing:
Shadowing 類似重新綁定的功能,imutable 可以透過 shadowing 將變數內容重新綁定。
use std::any::type_name;
fn print_type_of<T>(_: &T) {
println!("{}", type_name::<T>())
}
fn main() {
// imutable
let x = 5;
println!("x: {}", x);
print_type_of(&x);
let x = 6.1;
println!("x: {}", x);
print_type_of(&x);
}
執行結果如下,綁定後是不同型別的物件。
x: 5 i32 x: 6.1 f64
4. Constant 和 imutable 的差別:
Constant 和 imutable 的差別是 constant 可以在編譯時決定,但 imutable 通常是 runtime 決定。
use rand::Rng;
fn main() {
const PI: f32 = 3.14;
let var = do_somethong();
println!("PI: {}, var: {}", PI, var);
}
fn do_somethong() -> f32 {
let mut rng = rand::thread_rng();
rng.gen_range(0.0, 10.0)
}
imutable 可以確保變數在使用者的地方被重新綁定,減少可能造成的 bug。
留言
張貼留言