這里來聊一下Rust的變量聲明,以及基本的數(shù)據(jù)類型。
可變性
與其他編程語言很不同的一點是,Rust 的變量默認是不可變的。
let x = 5;
x = 6;
這一步編譯會報錯,因為rust的變量默認是不可變的。
let mut x = 5;
x = 6;
在變量前加上 mut 則表示正在定義一個可變變量,再改其值,就不會報錯。
let x = 5;
let x = 6;
let x = "name";
1.定義一個變量,并將5這個值綁定給這個變量
2.重新使用let x定義一個變量,相當于定義了一個新的變量,并且將6綁定給這個變量
3.再次使用let x定義一個變量,并且綁定一個不同類型的值
上面的三行代碼不會報錯,在Rust中,這個操作叫做Shadowing,中文翻譯是,舊的變量被新的變量隱藏了。
mut 與 Shadowing 的一個區(qū)別就是,Shadowing 相當于創(chuàng)建了一個新的變量,所以可以使用完全不同類型的值
常量
- 聲明常量使用
const,不使用let,例如const MAX_NUM:u32 = 10000;。 - 常量也
不能使用mut。 - 常量必須明確數(shù)據(jù)類型 const
MAX_NUM:u32= 10000; - 常量默認
不可變,總是不可變 - 常量命名規(guī)范是
大寫字母加下劃線
基本數(shù)據(jù)類型
1. 整型
| 長度 | 有符號 | 無符號 |
|---|---|---|
| 8-bit | i8 |
u8 |
| 16-bit | i16 |
u16 |
| 32-bit | i32 |
u32 |
| 64-bit | i64 |
u64 |
| arch | isize |
usize |
- 有符號可存儲正值和負值,無符號只能存儲正值
- 有符號的存儲范圍是 -(2n-1) ~ (2n-1 - 1),n是位數(shù)。例如i8可以存儲的范圍是 -128 ~ 127
- 無符號的存儲范圍是 0 ~ (2n - 1),例如 u8 可以存儲的范圍是 0 ~ 255
- isize和usize依賴于運行程序的計算機架構(gòu),64位架構(gòu)上,它們就是64位,32位架構(gòu)上,它們就是32位
- 默認類型是
i32
2. 浮點型
浮點型分為 f32 和 f64,默認類型是 f64
3. 布爾型
布爾型只有兩個值 true,false。let is_student: bool = false;
4. 字符型
字符型使用單引號,例如 let c1: char = 'A';, let c1: char = '?';。有一點要注意的是,Rust 的 char 類型代表了一個 Unicode 標量值(Unicode Scalar Value),這意味著它可以比 ASCII 表示更多內(nèi)容。在 Rust 中,拼音字母(Accented letters),中文、日文、韓文等字符,emoji(繪文字)以及零長度的空白字符都是有效的 char 值。
5. 數(shù)組類型
每個元素的類型必須相同,數(shù)組的長度不能動態(tài)增長或縮小。如果要修改數(shù)組中的某個值,則數(shù)組定義時要加 mut 才行
let a = [1, 2, 3 ,4 ,5];
let b: [i32: 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let num1 = a[0];
let num2 = a[1];
6. 元祖類型
元祖類型是將多個相同或不同類型的值,組合起來。如果要修改元祖中的某個值,則元祖定義時要加mut才行。
let tup = (1, 2, 3, "haha", 'c', 'B');
let tup2: (i32, char, char) = (15, 'C', 'D');
// 這一句稱作解構(gòu)元祖(destructuring), 將tup2中的值分給賦值給x,y,z
let (x, y z) = tup2;
// 訪問元祖中的某個值
let x = tup2.0; // 訪問第0個值
let y = tup2.1; // 訪問第1個值