05-rust结构体-struct

news/2025/1/20 21:54:16/文章来源:https://www.cnblogs.com/learnForLife/p/18682559

在 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 的结构体提供了灵活的定义和行为实现方式,使用场景包括:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/872346.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习ssm日记

补发一下前几次的学习日记 这是前两天在学maven高级的代码 都是自己敲得跟着视频 学习了分模块开发和父工程的创建以及关于依赖和pom文件相关知识

OpenWRT配置旁路由/中继模式,同时配置作为NAS必备的IPv6公网IP

1. 环境和要达成的目标 1.1 目标 主路由已配置好拨号,DHCP,IPv6 已刷OpenWRT路由B70作为中继路由,提高覆盖,解决一些老旧只能设备接入问题。 OpenWRT路由同时插入移动硬盘,配置WebDAV和smba作为NAS使用,所以此路自身要能获取到IPv6地址。 我的OpenWRT路由是极路由4,刷的…

【网关系统】通用设计

本文准备围绕七个点来讲网关,分别是网关的基本概念、网关设计思路、网关设计重点、流量网关、业务网关、常见网关对比,对基础概念熟悉的朋友可以根据目录查看自己感兴趣的部分。 一、什么是网关 网关,很多地方将网关比如成门, 没什么问题, 但是需要区分网关与网桥的区别,…

一文告诉你Linux下如何用C语言实现ini配置文件的解析和保存

嵌入式项目开发中,会有很多功能模块需要频繁修改参数,Linux下我们可以通过ini格式的文件保存配置信息。 本文通过开源库iniparser,详细讲解如何用C语言实现ini文件的参数解析和配置保存。 本文代码实例获取方式见文末。 一、ini文件 1 什么是 ini文件INI(Initialization F…

Mysql的学习

Mysql建立 索引优化: sql优化: 为了解决下面的索引失效问题序列索引优化:

中考英语优秀范文-014 The hero in my heart 我心中的英雄

1 写作要求 自古以来,人们对英雄的定义没有统一的标准。英雄可以是科学家、军人、运动员,也可以是医生、保安或外卖骑手。假如你是学校广播站的一名英语播报员,明天你准备向大家介绍一位你心目中的英雄,请你根据下面的要点提示,写一篇英语广播稿。 1 须包含提示中的所有内…

python 探空数据根据时间偏移量计算具体时间

这里有一组探空数据,每天08时和20时放气球,气球飞上去的时间就是用时间偏移量来计算的,而不是直接显示好的 根据“年”“月”“日”“时”“时间偏移量”列,时间偏移量单位为秒,计算具体的时间 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ @Time : 20…

LaTeX之符号表

本文介绍了在 $\LaTeX{}$ 中常用的符号。\(\LaTeX{}\) 之符号表 目录\(\LaTeX{}\) 之符号表\(\LaTeX{}\) 普通符号文本/数学模式通用符号希腊字母二元关系符二元运算符巨算符数学重音符号箭头作为重音的箭头符号定界符用于行间公式的大定界符其他符号AMS 符号AMS希腊字符和希伯…

【抓包工具】wireshark零基础使用教程

Wireshark是什么 Wireshark是使用最广泛的一款「开源抓包软件」,常用来检测网络问题、攻击溯源、或者分析底层通信机制。 它使用WinPCAP作为接口,直接与网卡进行数据报文交换。 Wireshark抓包原理 Wireshark使用的环境大致分为两种,一种是电脑直连互联网的单机环境,另外一种…