Rust- 结构体

In Rust, a struct (short for “structure”) is a custom data type that lets you name and package together multiple related values that make up a meaningful group. If you’re coming from an object-oriented language, a struct is like an object’s data attributes.

Here’s an example of a struct in Rust:

struct User {username: String,email: String,sign_in_count: u64,active: bool,
}// You can create an instance of the struct like this:
let user1 = User {email: String::from("someone@163.com"),username: String::from("someusername"),active: true,sign_in_count: 1,
};

This code defines a User struct that has four fields: username, email, sign_in_count, and active. The struct is then instantiated with the User { ... } syntax.

You can access the fields in a struct instance with dot notation:

println!("User's email: {}", user1.email);

Structs are also capable of having methods, which are defined within an impl block:

struct Rectangle {width: u32,height: u32,
}impl Rectangle {fn area(&self) -> u32 {self.width * self.height}
}let rect1 = Rectangle { width: 30, height: 50 };println!("The area of the rectangle is {} square pixels.",rect1.area()
);

In the above code, Rectangle is defined with width and height fields, and an area method is defined for it. The area method can be called on instances of Rectangle with dot notation, just like fields.

There are a few different types of structs in Rust, each with different use cases:

  • Classic structs, which are named and have a set of named fields. This is the most commonly used.

  • Tuple structs, which are named and have a set of unnamed fields. These are useful when you want to give a name to a tuple.

  • Unit structs, which are field-less, are useful for cases when you need to implement a trait on some type but don’t have any data you need to store in the type itself.

// Tuple struct
struct Color(u8, u8, u8);let white = Color(255, 255, 255);// Unit struct
struct Unit;

A comprehensive case is as follows:

fn main() {/*元组结构体struct Pair(String, i32);C语言风格结构体struct 结构体名称 {...}单元结构体,不带字段,在泛型中很有用。type Unitstruct 结构体名称 {字段1:数据类型字段2:数据类型...}let 实例名称 = 结构体名称 {字段1:数据1字段2:数据2...}*/let s = Study {name: String::from("Rust"),target: String::from("可以熟练书写Rust程序"),spend: 36,};println!("{:?}", s);    // 输出:Study { name: "Rust", target: "可以熟练书写Rust程序", spend: 36 }println!("{}", s.name); // 输出:Rustlet s3 = get_instance(String::from("Rust Programming Language"),String::from("熟练书写Rust程序"),36,);println!("{:?}", s3);   // 输出:Study { name: "Rust Programming Language", target: "熟练书写Rust程序", spend: 36 }// show(s3);/*impl 结构体 {fn 方法名(&self, 参数列表) 返回值 {// 方法体}}函数 可以直接调用,同一个程序不能出现2个相同的函数签名的函数,因为函数不归属任何owner.方法 归属某一个owner,不同的owner可以有相同的方法签名。&self 表示当前结构体的实例。也是结构体普通方法固定的第一个参数,其他参数可选。结构体静态方法fn 方法名(参数:数据类型,...) -> 返回类型 {// 方法体}调用方式  结构体名称::方法名(参数列表)*/println!("spend {}", s3.get_spend());   // 输出:spend 36let s4 = Study::get_instance_another(String::from("Rust Programming Language"),String::from("熟练书写Rust程序"),36,);println!("s4 {:?}", s4);    // 输出:s4 Study { name: "Rust Programming Language", target: "熟练书写Rust程序", spend: 36 }/*单元结构体是一个类型,有且只有一个值()*/// 元组结构体let pair = (String::from("Rust"), 1);println!("pair 包含{:?} and {:?}", pair.0, pair.1); // 输出:pair 包含"Rust" and 1// 解构元组结构体let (study, spend) = pair;println!("pair 包含{:?} and {:?}", study, spend);   // 输出:pair 包含"Rust" and 1
}fn show(s: Study) {println!("name is {} target is {} spend is {}",s.name, s.target, s.spend);
}fn get_instance(name: String, target: String, spend: i32) -> Study {return Study {name,target,spend,};
}#[derive(Debug)]
struct Study {name: String,target: String,spend: i32,
}impl Study {fn get_spend(&self) -> i32 {return self.spend;}fn get_instance_another(name: String, target: String, spend: i32) -> Study {return Study {name,target,spend,};}
}

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

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

相关文章

OpenHarmony ArkUI 如何调用相机

​ ArkUI调用相机和调用相册其实是一个思路,只用修改一个地方。 我们继续来说相机调用,ArkUI没办法自己获取相机,所以得依靠一下ohos.multimedia.camera 相机开发指导 介绍 本指导主要展示了调用相机的调用过程,以及调用相机的…

EasyExcel工具类,一键实现表格导入导出,有无对应实体类均可

EasyExcel工具类,一键实现表格导入导出,有无对应实体类均可 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但…

图的存储.

# 图的存储 ## 题目描述 给定一个 n 个顶点 m 条边的无向图。请以邻接矩阵和邻接表的形式输出这一张图。 ## 输入格式 第一行输入两个正整数 n 和 m,表示图的顶点数和边数。 第二行开始,往后 m 行,每行输入两个以空格隔开的正整数 u,v&…

数学对智能的作用与副作用

毋庸置疑,数学在人工智能与智能领域中发挥着不可或缺的作用,它提供了构建模型、优化算法、概率推理、机器学习和数据分析等关键工具,帮助实现智能系统的自主学习、决策和优化能力,数学对智能发展的作用巨大,具体如下&a…

前端vue uni-app自定义精美海报生成组件

在当前技术飞速发展的时代,软件开发的复杂度也在不断提高。传统的开发方式往往将一个系统做成整块应用,一个小的改动或者一个小功能的增加都可能引起整体逻辑的修改,从而造成牵一发而动全身的情况。为了解决这个问题,组件化开发逐…

HTTP(超文本传输协议)学习

关于HTTP补学 一、HTTP能干什么 通过下图能够直观的看出:“交换数据 ” 二、HTTP请求例子 一个 HTTP 方法,通常是由一个动词,像 GET、POST 等,或者一个名词,像 OPTIONS、HEAD 等,来定义客户端执行的动作。…

Zabbix分布式监控配置和使用

目录 1 Zabbix监控的配置流程2 添加主机组3 添加模板4 添加主机5 配置图形6 配置大屏7 新建监控项7.1 简介7.2 添加监控项7.3 查看数据7.4 图表 8 新建触发器8.1 概述8.2 添加触发器8.3 显示触发器状态 1 Zabbix监控的配置流程 在Zabbix-Web管理界面中添加一个主机,…

评分函数和损失函数是什么(知识图谱嵌入KGE)

一、知识图谱中的评分函数和损失函数 评分函数: 评分函数用于计算给定实体和关系之间的匹配度或相似度得分。它接收实体和关系的嵌入表示作为输入,并输出一个分数,该分数反映了实体和关系之间的相关性。评分函数的目标是衡量实体和关系之间的…

xml的注释删要干净Parameter index out of range (2 > number of parameters, which is 1).

报了这个bugjava.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1). 对应sql语句是这样的 把注释删掉,就不报错了,这是什么奇葩bug

mac的终端通过code .指令快速启动vscode

通过在vscode中安装"code"命令工具 打开vsocode,使用快捷键⇧⌘P,然后输入shell,会弹出来“Shell命令:在PATH中安装‘code’命令”浮窗,选择安装就可以了,然后就可以在终端通过code .来快速启动…

shell 自动创建磁盘分区 PV 、VG、 LV

设计思路: 1、创建磁盘分区变量集合 devName("vdb" "vdc" "vdd" "vde") 2、创建for循环,磁盘分区数量 /dev/vdb0~3,用于在for循环中if判断磁盘分区是否已经存在 if 判断条件 [[ -b "目录名称…

使用中间人攻击的arp欺骗教程

文章目录 前言一、查看网络接口配置第 1 步:从受害者处获取 IP 配置第 2 步:在 Linux 中打开数据包转发第 3 步:使用 arpspoof 将包重定向到您的计算机步骤4:拦截来自路由器的包裹步骤5:从目标的浏览器历史记录中嗅探图…

2023年08月编程语言流行度排名

点击查看最新编程语言流行度排名(每月更新) 2023年08月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多,大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自…

powershell 自动补全

我在zsh中使用智能提示 zsh-autosuggestions已经习惯了,而在windows中的终端默认没有智能提示,很起来不舒服。那么有没有什么替代呢? 安装powershell-7.3 我的windows 10默认安装的是powershell-5.1.19,所以我们先来升级一下。 …

[openCV]基于拟合中线的智能车巡线方案V1

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir d…

Golang之路---03 面向对象——空接口

空接口 什么是空接口 空接口是特殊形式的接口类型,普通的接口都有方法,而空接口没有定义任何方法口,也因此,我们可以说所有类型都至少实现了空接口。 type empty_iface interface { }每一个接口都包含两个属性,一个是…

uniapp uni-combox 下拉提示无匹配项(完美解决--附加源码解决方案及思路)

问题描述 匆匆忙忙又到了周一啦&#xff0c;一大早就来了一个头疼的问题&#xff0c;把我难得团团转&#xff0c;呜呜呜~ 下面我用代码的方式展示出来&#xff0c;看下你的代码是否与我的不同。 解决方案 <uni-forms-item label"名称" name"drugName&quo…

Python: Django 服务部署可能遇到的一些问题

502 bad gateway 不要用 python3 manage.py runserver 启动服务&#xff0c; 而要用&#xff1a; daphne -b 0.0.0.0 -p <端口> <工程名>.asgi:application此外&#xff0c;在 setting.py 中&#xff0c;修改&#xff1a; import osSECRET_KEY os.environ.get(D…

镜头基础知识

本文介绍镜头基础知识。 1.焦距 焦距指透镜中心到光聚集之焦点的距离&#xff0c;如下图&#xff0c;通常用f表示。 焦距是正值&#xff0c;一束平行光将会聚集在一个点上&#xff0c;焦距是负值&#xff0c;一束平行光在通过透镜之后将会扩散开。 注意&#xff1a; 1)这里…

[C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对文档文件去标签、如何获取文档标题...

项目开始的准备工作 在上一篇文章中, 已经从Boost官网获取了Boost库的源码. 相关文章: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 接下来就要编写代码了. 不过还需要做一些准备工作. 创建项目目录 所有的项目文件肯定要在一…