Rust 基本数据类型
2022-03-04 19:16:00
Rust 数据类型
Rust中所有的值都有其确切的数据类型,分为基本类型与复合类型。
基本类型
基本类型意味着无法再进行解构,为原子类型。以下数据类型均为基本类型:
- 数值类型:
- 有符号整型:
i8、i16、i32、i64、isize。
- 有符号整型:
- 无符号整型:
u8、u16、u32、u64、usize。
- 无符号整型:
- 字符串:
String字符串与&str字符串切片。
- 布尔类型:
true与false。
- 单元类型:
- 元组
(),唯一值也是()。
- 元组
复合类型
当基础类型无法满足结构要求时,可以使用复合类型将其包裹起来。复合类型由其他类型组合而成,例如struct、String、()与enum都是复合类型。
struct Person{
name: String,
age: u8,
gender: Gender,
}
enum Gender{
Woman,
Man,
Transgender,
None,
}
字符串切片
Rust中的字符串字面量类型为&str,即切片(slice)。
let s = "rust";
切片允许使用引用集合中的部分连续元素,而不是整个集合。
let s = String::from("hello,world");
let hello = &s[0..5]; //hello
let world = &s[6..11]; //world
以上就是创建切片的语法,使用方括号并且指定范围[起始位置..结束位置],其位置从0开始,为右半开区间。其长度即为结束索引-起始索引。
注意!
当在对占用不止一个字节的字符进行处理时,切片位置不正确会造成程序异常终止!
想要对占用多个字节的字符进行处理时,可以使用
chars方法.for char in "中文".chars(){ println!("{}",char); }当需要对其进行进一步操作时,需要使用第三方库来进行处理。例如:utf8_slice。
元组与解构
元组由多种类型组合而成,长度与顺序都是固定的。只需要将类型使用括号包裹起来就可以创建一个元组:
let tup: (i32, f64, u8) = (100, 10.2, 1);
要访问元组中的某个元素可以使用 . 来获取:
let number = tup.1; //10.2
解构
解构在语法上与元组十分相似,都是使用括号包裹起来,只是元组包裹的是数据类型和数值或者引用,而解构包裹的是变量名:
let ( x, y, z ) = tup;
解构可以一次性创建多个变量并按照顺序从元组中获取数据,以上即创建了x,y,z三个变量。
组合使用
将一组数据使用元组包裹,作为方法的返回值,使用时再进行解构,这样可以同时返回多种数据。
fn main() {
let words = "Hello world";
let (words, words_size) = push_rust_word(words.clone());
println!("{} - {}", words, words_size);
}
fn push_rust_word(words: &str) -> (String, usize) {
let mut words = String::from(words);
words.push_str(" rust!");
(words.to_owned(), words.len())
}
上面的代码创建了一个字符串切片words,复制一份并作为值传给了push_rust_word函数。而在接受返回值时,使用变量遮罩(Shadowing)特性,将原来的words字符串切片在作用域中覆盖掉,新的字符串words就变成了"hello world rust!"。
输出结果: Hello world rust! - 17