首页 > 其他分享 >05-rust结构体-struct

05-rust结构体-struct

时间:2025-01-20 21:54:31浏览次数:1  
标签:blue struct 05 Color i32 green rust red

在 Rust 中,结构体(struct)是定义数据类型和管理复杂数据的核心工具,类似于其他语言中的类,但它不支持内置继承。Rust 提供了三种基本的结构体形式:常规结构体(regular struct)、元组结构体(tuple struct)和单元结构体(unit struct)。下面详细讲解:


1. 常规结构体(Regular Struct)

常规结构体是 Rust 中最常用的结构体类型,允许为每个字段命名。

定义

struct Color {
    red: i32,
    green: i32,
    blue: i32,
}

创建实例

let green = Color { red: 0, green: 255, blue: 0 };

访问字段

println!("Red: {}, Green: {}, Blue: {}", green.red, green.green, green.blue);

修改字段

常规结构体默认不可变,需要加 mut 来允许修改字段:

let mut color = Color { red: 0, green: 255, blue: 0 };
color.red = 128;
println!("New Red: {}", color.red);

2. 元组结构体(Tuple Struct)

元组结构体类似于元组,但有一个命名类型,用于分组多个值而不需要命名字段。

定义

struct Color(i32, i32, i32);

创建实例

let green = Color(0, 255, 0);

访问字段

通过索引访问字段:

println!("Red: {}, Green: {}, Blue: {}", green.0, green.1, green.2);

3. 单元结构体(Unit Struct)

单元结构体没有任何字段,通常用于标识或作为类型标签。

定义

struct UnitStruct;

创建实例

let unit = UnitStruct;

用途

  • 作为标记类型,表示某种状态或行为。
  • 用于泛型编程时的占位类型。

4. 实现方法和特性

方法实现

使用 impl 块可以为结构体实现方法(类似类中的成员函数)。

impl Color {
    fn new(red: i32, green: i32, blue: i32) -> Self {
        Self { red, green, blue }
    }

    fn display(&self) {
        println!("Red: {}, Green: {}, Blue: {}", self.red, self.green, self.blue);
    }
}

示例

let green = Color::new(0, 255, 0);
green.display();

5. 自动派生特性

通过 #[derive] 注解可以为结构体自动实现常用的特性,例如 DebugClonePartialEq 等。

#[derive(Debug, Clone, PartialEq)]
struct Color {
    red: i32,
    green: i32,
    blue: i32,
}

fn main() {
    let color = Color { red: 0, green: 255, blue: 0 };
    println!("{:?}", color); // Debug 输出
}

总结

Rust 的结构体提供了灵活的定义和行为实现方式,使用场景包括:

  • 常规结构体:适合需要明确字段含义的复杂数据。
  • 元组结构体:用于字段含义不重要的小型数据组。
  • 单元结构体:用于标记、泛型占位。

标签:blue,struct,05,Color,i32,green,rust,red
From: https://www.cnblogs.com/learnForLife/p/18682559

相关文章

  • P11269 【MX-S5-T3】IMAWANOKIWA (Construction ver.)
    P11269【MX-S5-T3】IMAWANOKIWA(Constructionver.)题目翻译:对一个初始长度为\(n\)的序列\(a\)进行操作,每次操作可以任选两个相邻的数\(a_j,a_{j+1}\)将这两个数删去,在加上\(popc(a_j+a_{j+1})\)\(popc(x)\),表示\(x\)在二进制下\(1\)的个数而我们要求出一个操......
  • rust学习-函数的定义与使用
    rust学习-函数的定义与使用1.函数的基本定义2.函数的参数多个参数3.返回值提前返回4.函数调用5.函数的所有权和借用传递所有权借用6.函数作为参数和返回值函数作为参数函数作为返回值7.泛型函数8.函数注释(文档注释)1.函数的基本定义在Rust中,函数使用fn......
  • AGC005做题笔记
    AtcoderGrandContest005A-STring题目大意有一个字符串\(X\),它的字符数是偶数。其中一半字符为"S",另一半字符为"T"。现执行以下操作\(10^{10000}\)次:在\(X\)中(连续)出现的ST子串中,删除最左边的一个。如果没有出现,则不做任何操作。找出\(X\)的最终长度。解......
  • 中国移动魔百盒CM311-1e(s)_S905L3SB芯片_2+16_安卓9_线刷固件包
    中国移动魔百盒CM311-1e(s)_S905L3SB芯片_2+16_安卓9_线刷固件包 线刷方法:(新手参考借鉴一下)1、准备好一根双公头USB线刷刷机线,长度30-50CM长度最佳,同时准备一台电脑,拆开盒子;2、电脑上安装好刷机工具AmlogicUSBBurningTool软件→打开软件→文件→导入烧录包→把......
  • ELA-21 (human); 是一种 apelin 受体激动剂;LRKHNCLQRRCMPLHSRVPFP(Cys6-Cys11); 2245073
    ELA-21(human) 简介    ELA-21(human)是一种 apelin 受体激动剂,pKi 为8.52。ELA-21(human)在亚纳摩尔效价下,完全抑制Forskolin诱导的cAMP产生,并刺激 β-arrestin 募集。ELA-21(human)也是G蛋白依赖性和非依赖性途径的激动剂。【中文名称】ELA-2......
  • cpp struct json相互转换
    C++结构体与JSON的相互转换在现代软件开发中,数据的序列化和反序列化是一个常见的需求。尤其在客户端和服务器之间的数据交换中,JSON因其简单、易读和良好的兼容性而被广泛使用。本文将介绍如何在C++中实现结构体和JSON之间的相互转换,重点介绍使用 nlohmann/json库。nlohmann/jso......
  • Silicon Labs C8051F020 单片机 USB Debug Adapter适配器调试无法连接问题
    在做单片机大作业,使用Keil,使用USB连接开发板。想要进入到调试或烧录功能时总是报错:CannotconnecttotheselectedUSBdebugadapterToolStickbaseadapter.Pleasecheckthatthedeviceispluggedinandnotalreadyinuse如图:首先按照老师发的教程逐个复查,排除了驱......
  • [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(05):svg图片转为png格式(暨svg部件的
    前言本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。环境配置系统:window10平台:visualstudiocode语言:rust......
  • 打卡信奥刷题(628)用C++信奥P8053[普及组/提高] [COCI2015-2016#4] DEATHSTAR
    [COCI2015-2016#4]DEATHSTAR题目描述你排除万难,潜入了DeathStar。要想摧毁它,你需要一个长度为nnn的数组a......
  • Java初学者笔记-05、集合框架
    集合体系集合是可变长的。Collection:代表单列集合,每个元素包含一个值。Map:代表双列集合,每个元素包含两个值。Collection集合List系列集合:添加的元素是有序、可重复、有索引。ArrayList、LinekdList:有序、可重复、有索引。Set系列集合:添加的元素是无序、不重复、无索......