rust入门

举报
yd_254179665 发表于 2025/07/23 17:29:44 2025/07/23
【摘要】 Rust 是一种静态类型语言,这意味着在编译时必须知道所有变量的类型。Rust 支持多种数据类型,包括标量类型和复合类型。标量类型整数类型:有符号和无符号整数,例如 i8、i16、i32、i64 和 u8、u16、u32、u64。浮点类型:f32 和 f64。布尔类型:bool,值为 true 或 false。字符类型:char,用单引号表示,例如 'A'。复合类型元组:可以包含多个不同类型...

Rust 是一种静态类型语言,这意味着在编译时必须知道所有变量的类型。Rust 支持多种数据类型,包括标量类型和复合类型。

标量类型
  • 整数类型:有符号和无符号整数,例如 i8i16i32i64  u8u16u32u64
  • 浮点类型f32  f64
  • 布尔类型bool,值为 true  false
  • 字符类型char,用单引号表示,例如 'A'
复合类型
  • 元组:可以包含多个不同类型的值,例如 (i32, f64, char)
  • 数组:固定长度的相同类型值的集合,例如 [i32; 5]
变量
  • 不可变变量:默认情况下,变量是不可变的,一旦赋值后不能更改。
  • 可变变量:使用 mut 关键字声明的变量是可变的,可以更改其值。
常量
  • 常量:使用 const 关键字声明,必须指定数据类型,且值在编译时确定。
    fn main() {
        // 不可变变量
        let x = 10;
        // 可变变量
        let mut y = 20;
        y = 30; // 正确!y 是可变的
    
        // 常量
        const MAX_NUM: u32 = 100;
    
        // 整数类型
        let integer: i32 = 42;
        let unsigned_integer: u64 = 100;
    
        // 浮点数类型
        let float_num: f64 = 3.14;
    
        // 布尔类型
        let is_rust_cool: bool = true;
    
        // 字符类型
        let my_char: char = 'A';
    
        // 元组
        let tuple: (i32, f64, char) = (1, 2.0, 'c');
    
        // 数组
        let array: [i32; 5] = [1, 2, 3, 4, 5];
    
        // 打印变量和常量的值
        println!("x: {}", x);
        println!("y: {}", y);
        println!("MAX_NUM: {}", MAX_NUM);
        println!("integer: {}", integer);
        println!("unsigned_integer: {}", unsigned_integer);
        println!("float_num: {}", float_num);
        println!("is_rust_cool: {}", is_rust_cool);
        println!("my_char: {}", my_char);
        println!("tuple: {:?}", tuple);
        println!("array: {:?}", array);
    }

    Rust 中有多种函数类型,包括常规函数、闭包、关联函数和方法。Rust 不支持类似 C++ 的虚函数,但可以通过其他方式实现类似的功能

    fn add(a: i32, b: i32) -> i32 {
        a + b
    }
    
    fn main() {
        let result = add(1, 2);
        println!("Result: {}", result); // 输出: Result: 3
    }

    闭包是匿名函数,可以捕获其定义环境中的变量。闭包可以有多种类型,包括 FnFnMutFnOnce

  • fn main() {
        let msg = "Hello".to_string();
        let greet = |name: &str| -> String {
            format!("{} {}", msg, name)
        };
    
        let greeting = greet("Rust");
        println!("{}", greeting); // 输出: Hello Rust
    }

关联函数和方法定义在结构体或枚举的 impl 块中。关联函数不以 self 作为第一个参数,而方法则以 self&self&mut self 作为第一个参数。

struct Point {
    x: i32,
    y: i32,
}

impl Point {
    // 关联函数
    fn new(x: i32, y: i32) -> Point {
        Point { x, y }
    }

    // 方法
    fn distance_from_origin(&self) -> f64 {
        ((self.x.pow(2) + self.y.pow(2)) as f64).sqrt()
    }
}

fn main() {
    let p = Point::new(3, 4);
    println!("Distance from origin: {}", p.distance_from_origin()); // 输出: Distance from origin: 5.0
}

Rust 结构体具有以下特性:

  1. 字段:结构体可以包含多个字段,每个字段有名称和类型。
  2. 方法:结构体可以定义方法,用于操作结构体的字段。
  3. 关联函数:结构体可以定义关联函数,用于创建结构体实例或执行与结构体相关的操作。
  4. 派生特性:可以使用 #[derive] 属性为结构体派生一些常见的特性,如 DebugCloneCopy 等。
  5. 生命周期:结构体可以包含生命周期参数,用于确保结构体的引用在有效期内。
#[derive(Debug, Clone, Copy)]
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // 关联函数
    fn new(width: u32, height: u32) -> Rectangle {
        Rectangle { width, height }
    }

    // 方法
    fn area(&self) -> u32 {
        self.width * self.height
    }

    // 方法
    fn can_hold(&self, other: &Rectangle) -> bool {
        self.width > other.width && self.height > other.height
    }
}

fn main() {
    let rect1 = Rectangle::new(30, 50);
    let rect2 = Rectangle::new(10, 10);
    let rect3 = Rectangle::new(40, 60);

    println!("rect1 is {:?}", rect1); // 输出: rect1 is Rectangle { width: 30, height: 50 }
    println!("The area of rect1 is {}", rect1.area()); // 输出: The area of rect1 is 1500
    println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2)); // 输出: Can rect1 hold rect2? true
    println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3)); // 输出: Can rect1 hold rect3? false
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。