• Rust(7):结构体类型


    今天学习的内容是 Rust 中的结构体类型

    结构体是一种用户自定义的数据类型,它是多种不同数据类型的组合。

    结构体类型使用关键字 struct 声明,有三种类型的结构体:

    • 无字段的单元结构
    • 元组结构
    • 经典的 C 结构

    结构体类型的命名采用大驼峰命名规则,下面看具体的介绍。

    单元结构体(unit struct )

    这种结构体类型没有字段定义,使用关键字 struct 进行声明,随后是其名称,并用分号作为结尾。比如:

    struct Unit;
    fn main() {
      let unit = Unit;
    }  
    

    这种结构体类型用的非常少。

    元组结构体(tuple struct )

    同样使用 struct 进行声明,后面跟类型名称,最后使用元组类型来定义结构体内容。比如:

    struct Color(i32, i32, i32);
    

    虽然没有显式的为结构体中的每个字段命名,但是一个元组结构体类型是具有明确的类型名称的。比如这个例子就声明了 Color 类型的元组结构体。

    初始化一个元组结构体:

    let color = Color(255, 255, 255);
    

    元组结构体的访问,和元组类型一样,可以使用 . 语法,可以使用索引,可以使用模式匹配,比如:

    println!("{}", color.0); // 255
    

    类 C 结构体

    使用 struct 声明,后面跟着结构体类型的名称,再后面使用一对大括号来声明该类型有哪些字段。比如声明一个 User 类型的结构体:

    struct User {
        name: String,
        age: u32,
    }
    

    结构体中的每个字段使用 , 进行分隔,最后一个字段可以省略。

    初始化一个 User 结构体实例:

    let user = User {
        name: String::from('kw'),
        age: 18
    }
    

    访问结构体中的字段可以使用 . 运算符和模式匹配:

    println!("名字:{}, 年龄:{}", user.name, user.age); // 名字:kw, 年龄:18
    

    JSer 可以发现,这种类 C 结构体,非常像是 JS 中的普通对象。其实它们两者的意义也非常一致,就是能自定义更加复杂的数据类型,来应对更复杂的类型结构。

    在 Rust 中,使用两个点 .. 来实现快速复用一个现成的结构体实例:

    struct User {
      name: String,
      age: u32,
    }
    
    fn main() {
      let user1 = User {
        name: String::from("user1"),
        age: 18,
      };
    
      let user2 = User {
        name: String::from("user2"),
        ..user
      };
    
    
      println!("名字:{}, 年龄:{}", user2.name, user2.age); 
    }
    

    打印的结果是 名字:user2, 年龄:18 ,说明 user2name 是初始化时设置的值,并复用了 user1age 字段的值。

    小结

    Rust 中的结构体类型, 包括三类:单元结构体,元组结构体和类 C 结构体,其中类 C 结构体是使用最广泛的一种结构体类型。

  • 相关阅读:
    大话STL第七期——stack栈
    Java 中是如何获取 IP 属地的
    Nacos-配置中心基本使用
    缓存一致性MESI与内存屏障
    Python实现k-近邻算法案例学习
    【读书后台管理系统】—前端框架搭建(一)
    lv7 嵌入式开发-网络编程开发 03 TCP/IP与五层体系结构
    凉鞋的 Godot 笔记 102. 场景与节点的增删改查
    OC-手动引用计数内存管理
    php使用kafka实现消息队列处理
  • 原文地址:https://blog.csdn.net/Old_Soldier/article/details/127044210