大部分情况下,rust 可以基于上下文自动推导出变量的类型。下面代码中,变量 x 没有显式,rust 默认是 i32 类型。
fn main() {
let x = 5;
}
但也有一些例外情况,比如,字符串类型的转换中变量 x 的类型,rust 就自动推导不出来。这种情况就需要显示的声明变量的类型。
fn main() {
let x = "5".parse().expect("fail");
let sum = x + 10;
}
整数的类型声明有别于其他语言,有符号整数类型名称以 u 开头,无符号以 i 开头。usize 和 isize 是两种特殊的整数类型,它们的长度取决于系统是 32位还是64位。
长度 | 有符号 | 无符号 |
---|---|---|
8bit | u8 | i8 |
16bit | u16 | i16 |
32bit | u32 | i32 |
64bit | u64 | i64 |
arch | usize | isize |
对于位数为 n 的有符号整形,它可以存储 − 2 ( n − 1 ) -2^{(n-1)} −2(n−1) 到 2 ( n − 1 ) − 1 2^{(n-1)}-1 2(n−1)−1范围内的所有整数,无符号可以存储 0 到 2 n − 1 2^{n}-1 2n−1 范围内的所有整数。
在Rust中,char类型被用于描述语言中最基础的单个字符。需要区分的是,char类型使用单引号指定,而不同于字符串使用双引号指定。
Rust中的char类型占4字节,是一个Unicode标量值,这也意味着它可以表示比ASCII多得多的字符内容。拼音字母、中文、日文、韩文、零长度空白字符,甚至是emoji表情都可以作为一个有效的char类型值。
元组将不同类型的多个值组合进一个复合类型中,在声明的时候会确定长度,无法在声明后增加或减少其中的元素数量。
fn main() {
let tup: (i32, f64, u32) = (1, 2.0, 3);
}
下面通过 let 的方式来解析元组,但这种方式并不方便,我们还可以通过索引来进行访问。
fn main() {
let tup: (i32, f64, u32) = (1, 2.0, 3);
let (x, y, z) = tup;
println!("x:{}, y:{}, z:{}", x, y, z);
}
通过索引的方式来进行访问:
fn main() {
let tup: (i32, f64, u32) = (1, 2.0, 3);
println!("x:{}, y:{}, z:{}", tup.0, tup.1, tup.2);
}
与元组不同,数组中的每一个元素都必须是相同的类型。Rust中的数组拥有固定的长度,一旦声明就再也不能随意更改大小。
下面通过一对方括号来声明数组,如果要显示的指定数组类型,类型声明也需要一对方括号,括号中写上数组元素的类型,一个分号,以及数组的长度。
fn main() {
let a = [1, 2, 3];
}
显示地声明数组类型:
fn main() {
let a: [i32; 3] = [1, 2, 3];
}
Rust 还提供一种初始化数组的语法,前提是你想创建一个包含相同元素,指定长度的数组,你可以在方括号中指定元素的值和长度。下面的例子就创建了一个 [“prefix_”, “prefix_”, “prefix_”] 数组。
fn main() {
let a = ["prefix_"; 3];
println!("{}", a[0])
}