Rust结构体和枚举类

news2024/12/28 23:10:02

文章目录

    • 元组结构体
    • 结构体
    • 枚举类

Rust初步上手⚙所有权

元组结构体

元组结构体是最简单的结构体,可以粗暴地理解为是有名字的元组,二者的区别如下。

let tup: (i32, f64, u8) = (500, 6.4, 1);

struct Test(i32, f64, u8);
let t = Test(500,6.4,1)

第一行代码将一个元组绑定给变量tup,而tup要求三个位置的变量分别是32位整型、双精度以及8位无符号整型。

而元组结构体则首先需要有一个名字,通过struct声明结构体并给定不同位置处的数据类型后,再调用结构体的构造函数Test,来新建一个元组结构体,最后绑定给变量t。

结构体

完整的结构体,不仅本身有名字,结构体中的成员也可以有名字,并且可以定义成员方法,下面做一个简单的示例。

#[derive(Debug)]
struct Person{
    name: String,
    age : u8
}

impl Person{
    fn say_hello(){
        println!("Hello, world!");
    }
    fn self_intro(&self){
        println!("I'm {}, {} years old", 
            self.name, self.age);
    }
}

fn main(){
    let john = Person{name: String::from("John"), age:12};
    Person::say_hello();
    john.self_intro();
    println!("{:?}",john);
}

编译后运行结果如下。

>rustc struct.rs
>struct.exe
Hello, world!
I'm John, 12 years old
Person { name: "John", age: 12 }

首先,创建结构体时,其内部结构需要用花括号包裹,并且指定结构体成员的名称和数据类型。

然后,通过impl为结构体绑定成员方法,尽管仍旧通过fn来作为方法的标识,但若调用结构体成员,必须将&self作为结构体的输入参数;如果不添加&self,则被称为关联函数。

最后,结构体在实例化时,通过冒号来绑定成员名和具体的值。其成员方法(有&self参数)由实例来调用,并且省略参数&self;而关联函数则通过结构体的名称和双冒号来调用。

上面的代码除了展示结构体及其成员方法的定义与构造之外,还在println!中使用了"{:?}"形式的占位符,用于更便捷地打印结构体及其成员。

枚举类

枚举是一个非常经典的编程概念了,理解起来没有难度,但Rust为其适配了match语法,使得枚举类变得有了一些可玩性。

#[derive(Debug)]

enum Person {
    Boy{beard_length: u32}, 
    Girl{hair_color: String}
}

fn main() {
    let john = Person::Boy{beard_length:5};
    let amy = Person::Girl{hair_color:String::from("red")};
    println!("{:?}\n{:?}", john, amy);
    match john {
        Person::Boy { beard_length } => {
            println!("{}cm", beard_length);
        },
        Person::Girl { hair_color } => {
            println!("{} hair", hair_color);
        }
    }
}

运行结果如下

>enum.exe
Boy { beard_length: 5 }
Girl { hair_color: "red" }
5cm

上面代码中,首先定义了一个枚举类Person,其内部有两个成员,分别是Boy和Girl,其中每一个都是结构体,Boy有一个成员是胡子的长度,Girl封装了一个成员是头发的颜色。

然后在main函数中,分别将枚举类实例化为john和amy。

最后,使用了match语法,如果john是Boy,就取出其中的beard_length,并打印;如果是Gril,就取出其中的hair_color,同样打印出来。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统——文件在外存中的分配方式(王道视频p61 P62)

1.总体概述: 连续分配 —— 链接分配 —— 索引分配 (1)对于顺序分配,这种方式 基本不会使用了, 因为 它存在一个 核心的问题就是 没法更新;不过,还是要注意它的 “文件目录”——其中存放了…

Memcached构建缓存服务器

Memcache介绍 1、特点 内置存储方式----------为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失 简单key/value存储--------------服务器不关心数据本身的意义及结构&…

NSSCTF web刷题记录4

文章目录 [NSSRound#4 SWPU]1zweb(revenge)[强网杯 2019]高明的黑客[BJDCTF 2020]Cookie is so subtle![MoeCTF 2021]fake game[第五空间 2021]PNG图片转换器[ASIS 2019]Unicorn shop[justCTF 2020]gofs[UUCTF 2022 新生赛]phonecode[b01lers 2020]Life On Mars[HZNUCTF 2023 f…

【qemu逃逸】GACTF2020-babyqemu

前言 虚拟机用户名:root 无密码 设备逆向 题目去掉的符号,经过逆向分析,实例结构体如下: 可以看到 arr_int_8 数组后面存在一个函数指针,不用想基本上就是劫持该函数指针了。 denc_mmio_read 函数 这里存在越界读…

.net core 到底行不行!超高稳定性和性能的客服系统:性能实测

业余时间用 .net core 写了一个升讯威在线客服系统。并在博客园写了一个系列的文章,介绍了这个开发过程。 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免费和分享,后…

最新知识付费变现小程序源码/独立后台知识付费小程序源码/修复登录接口

最新知识付费变现小程序源码,独立后台知识付费小程序源码,最新版修复登录接口。 主要功能 会员系统,用户登录/注册购买记录 收藏记录 基本设置 后台控制导航颜色 字体颜色 标题等设置 流量主广告开关小程序广告显示隐藏 广告主审核过审核…

VS2022创建win32汇编项目

文章目录 一、下载安装win32环境1.1、下载网址:https://masm32.com/1.2、解压缩安装1.3、安装路径1.4、安装masm32 SDK1.5、安装成功1.6、导入lib1.7、配置默认,可以根据自己需求修改1.8、启动界面二、vs2022 安装过程略过。。。2.1、创建项目2.2、填写项…

高通Android 8.1 扫码枪无法扫sn包含2或者全部是2的问题

背景:由于近期工厂生产,测试突然反馈扫码枪扫sn总是丢失2,比如 AXB2SHS822009997/LSXG 结果显示是 AXBSHS800997/LSX 于是我叫测试找了之前可以版本然后抓日志进行对比发现,确实只有2这个数字无法扫,如果把2这一位改成…

California Science Museum

文章目录 1. University of Southern California(USC)2. NASA航天飞机3. 返回舱4. Others彩蛋1: Paris, capital of France彩蛋2: Switzerland(瑞士)1. University of Southern California(USC) 2. NASA航天飞机

运动耳机品牌排行榜,推荐几款优秀的运动耳机

​说起耳机,相信大家都比较熟悉,特别是对于喜欢运动的爱好人士来说,那更是随身携带着。随着运动耳机的增长,大家都不知道该如何选择了。对于运动耳机除了需要佩戴稳固舒适之外,还有就是音质表现、防水性能、通话质量等…

外汇天眼实勘功能升级,带你沉浸式“云”穿交易商现场!

最近,外汇天眼新出了一个功能,这个功能可了不得了,不管你在国外还是在国内,它都能带你走进交易商现场。不过在介绍该功能之前,天眼君先问大家几个问题:在进行外汇交易前,你对自己的交易平台了解…

项目启动∣得益乳业引进企企通采购供应链管理+智采商城平台,切实提升供应链效率

近日,山东得益乳业股份有限公司(以下简称“得益乳业”)与企企通成功召开采购供应链管理智采商城双项目启动会。双方高层领导及项目团队关键成员,一同出席本次启动会。 本次合作以企企通数字化采购解决方案为基础,结合得…

基于 golang 从零到一实现时间轮算法 (三)

引言 本文参考小徐先生的相关博客整理,项目地址为: https://github.com/xiaoxuxiansheng/timewheel/blob/main/redis_time_wheel.go。主要是完善流程以及记录个人学习笔记。 分布式版实现 本章我们讨论一下,如何基于 redis 实现分布式版本的…

Java零基础手把手保姆级教程_类和对象(超详细)

文章目录 Java零基础手把手保姆级教程_类和对象(超详细)1. 类和对象1.1 类和对象的理解1.2 类的定义1.3 对象的使用1.4 学生对象-练习1.5测测你掌握了没? 2. 对象内存图2.1 单个对象内存图2.2 多个对象内存图2.3 多个对象指向相同内存图 3. 成…

从首届中国测绘地理信息大会,解读2023年度国产GIS创新关键词

创新是什么?这是各行各业持续思考的问题。 第一届中国测绘地理信息大会已进入倒计时!这是中国测绘学会、中国地理信息产业协会和中国卫星导航定位协会共同主办的全国性高端盛会。据悉,本次大会将有1个主论坛、38场分论坛,近2万平…

YOLOv8改进有效涨点系列->多位置替换可变形卷积(DCNv1、DCNv2、DCNv3)

本文介绍 这篇文章主要给大家讲解如何在多个位置替换可变形卷积,它有三个版本分别是DCNv1、DCNv2、DCNv3,在本篇博文中会分别进行介绍同时进行对比,通过本文你可以学会在YOLOv8中各个位置添加可变形卷积包括(DCNv1、DCNv2、DCNv3)&#xff0…

【每日OJ题—— 142. 环形链表 II (链表)】

每日OJ题—— 142. 环形链表 II (链表) 1.题目:142. 环形链表 II 2.方法讲解2.1.解法一:2.1.1.图文解析2.1.2.代码实现2.1.3.提交通过展示 2.2解法二:2.2.1图文解析2.2.2代码实现2.2.3.提交通过展示 1.题目:142. 环形链…

山西电力市场日前价格预测【2023-11-07】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-07)山西电力市场全天平均日前电价为318.54元/MWh。其中,最高日前电价为514.01元/MWh,预计出现在18: 00。最低日前电价为192.95元/MWh,预计…

ZKP16 Hardware Acceleration of ZKP

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 16: Hardware Acceleration of ZKP (Guest Lecturer: Kelly Olson) The What and Why of Hardware Acceleration Hardware acceleration is the use of dedicated hardware to accelerate an operation so that it runs faster…

Intel oneAPI笔记(3)--jupyter官方文档(SYCL Program Structure)学习笔记

前言 本文是对jupyterlab中oneAPI_Essentials/02_SYCL_Program_Structure文档的学习记录,包含对Device Selector、Data Parallel Kernel、Host Accessor、Buffer Destruction、的介绍,最后还有一个小关于向量(Vector)加法的实例 …