在Rust中還可以用const關鍵字做聲明。如下所示:
const GLOBAL: i32 = 0;
使用const聲明的是常量,而不是變量。因此一定不允許使用mut關鍵字修飾這 個變量綁定,這是語法錯誤。常量的初始化表達式也一定要是一個編譯期常量,不 能是運行期的值。它與static變量的最大區別在于:編譯器并不一定會給const常量分 配內存空間,在編譯過程中,它很可能會被內聯優化。因此,用戶千萬不要用hack 的方式,通過unsafe代碼去修改常量的值,這么做是沒有意義的。以const聲明一個 常量,也不具備類似let語句的模式匹配功能。
2.2 基本數據類型 2.2.1 bool
布爾類型(bool)代表的是“是”和“否”的二值邏輯。它有兩個值:true和false。 一般用在邏輯表達式中,可以執行“與”“或”“非”等運算。
fn main() {
let x = true;
let y: bool = !x;
let z = x && y;
println!(“{}”, z);
let z = x || y;
println!(“{}”, z);
letz=x&y; println!(“{}”, z);
letz=x|y; println!(“{}”, z);
letz=x^y;
println!(“{}”, z);
}
// 取反運算
// 邏輯與,帶短路功能
// 邏輯或,帶短路功能
// 按位與,不帶短路功能 // 按位或,不帶短路功能 // 按位異或,不帶短路功能
一些比較運算表達式的類型就是bool類型:
fn logical_op(x: i32, y: i32) {
let z : bool = x < y;
println!(“{}”, z);
}
if a >= b { …
} else { …
}
2.2.2 char 字符類型由char表示。它可以描述任何一個符合unicode標準的字符值。在代碼
中,單個的字符字面量用單引號包圍。
let love = ‘?’; // 可以直接嵌入任何 unicode 字符 字符類型字面量也可以使用轉義符:
bool類型表達式可以用在if/while等表達式中,作為條件表達式。比如:
let c1 = ‘\n’;
let c2 = ‘\x7f’;
let c3 = ‘\u{7FFF}’;
// 換行符
// 8 bit 字符變量 // unicode字符
因為char類型的設計目的是描述任意一個unicode字符,因此它占據的內存空間 不是1個字節,而是4個字節。
對于ASCII字符其實只需占用一個字節的空間,因此Rust提供了單字節字符字 面量來表示ASCII字符。我們可以使用一個字母b在字符或者字符串前面,代表這個 字面量存儲在u8類型數組中,這樣占用空間比char型數組要小一些。示例如下:
let x :u8 = 1;
let y :u8 = b’A’;
let s :&[u8;5] = b"hello";
let r :&[u8;14] = br#“hello \n world”#;