Rust 基本数据类型
2022-03-04 19:16:00

Rust 数据类型

Rust中所有的值都有其确切的数据类型,分为基本类型与复合类型。

基本类型

基本类型意味着无法再进行解构,为原子类型。以下数据类型均为基本类型:

  • 数值类型:
    • 有符号整型:i8i16i32i64isize
    • 无符号整型:u8u16u32u64usize
  • 字符串:
    • String字符串与&str字符串切片。
  • 布尔类型:
    • truefalse
  • 单元类型:
    • 元组(),唯一值也是()

复合类型

当基础类型无法满足结构要求时,可以使用复合类型将其包裹起来。复合类型由其他类型组合而成,例如structString()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;

解构可以一次性创建多个变量并按照顺序从元组中获取数据,以上即创建了xyz三个变量。

组合使用

将一组数据使用元组包裹,作为方法的返回值,使用时再进行解构,这样可以同时返回多种数据。

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

Prev
2022-03-04 19:16:00
Next