Rust枚举类型详解

Rust是一门强类型的系统级编程语言,其枚举类型(enum)是一种强大的数据结构,用于表示一组可能的值。在本文中,我们将深入探讨Rust中枚举类型的使用,并以IpAddrIpAddr1为例进行介绍。

IpAddr枚举

首先,让我们看一下IpAddr枚举的定义:

enum IpAddrKind {V4,V6,
}struct IpAddr {kind: IpAddrKind,address: String,
}

在这里,我们定义了一个名为IpAddrKind的枚举,它有两个变体(variants):V4V6,分别表示IPv4和IPv6。然后,我们定义了一个包含IpAddrKind和一个String类型地址的结构体IpAddr

接下来,我们在main函数中使用这个枚举:

fn main() {let four = IpAddrKind::V4;let six = IpAddrKind::V6;route(four);route(six);route(IpAddrKind::V4);let home = IpAddr {kind: IpAddrKind::V4,address: String::from("127.0.0.1"),};let loopback = IpAddr {kind: IpAddrKind::V6,address: String::from("::1"),};
}

我们创建了foursix,分别为IPv4和IPv6的IpAddrKind枚举变体。然后,我们调用route函数来展示如何使用枚举作为参数。最后,我们创建了两个IpAddr实例,分别表示本地主机和回环地址。

IpAddr1枚举

接下来,我们引入了另一个版本的IpAddr,使用IpAddr1枚举:

enum IpAddr1 {V4(u8, u8, u8, u8),V6(String),
}

这里,我们使用了关联的数据,将IPv4地址表示为四个u8类型的值,而IPv6地址表示为一个String

main函数中,我们还介绍了如何使用IpAddr1的不同变体:

let home = IpAddr1::V4(127, 0, 0, 1);

这里,我们创建了一个IpAddr1实例,使用了V4变体,同时传递了四个u8类型的参数。

枚举的优势

使用枚举的主要优势之一是,它允许我们创建一个类型,该类型的值可以是有限集合中的任何一个。在这里,IpAddrKindIpAddr1枚举分别代表了IPv4和IPv6的两种不同的表示方式。

另外,对于IpAddr1来说,我们可以在不使用额外结构体的情况下,将数据附加到枚举的变体中。这提供了更紧凑和直观的数据表示。

实现方法和方法调用

在最后部分,我们展示了如何为IpAddr1枚举实现一个方法:

impl IpAddr1 {fn call(&self) {}
}

这样,我们就可以在IpAddr1实例上调用call方法。这对于为枚举类型添加自定义行为非常有用。

总的来说,Rust的枚举类型提供了强大而灵活的工具,使得数据结构的表示更为清晰,并且能够结合方法实现更多的功能。在实际的编程中,合理使用枚举可以提高代码的可读性和维护性。

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

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

相关文章

第13章 网络 Page747~749 asio核心类 ip::tcp::resolver

3, ip::tcp::resolver 如果新浪的IP地址变了,该怎么办呢? ip::tcp::resolver 可以帮我们用上www.sina.com.cn,因为它负责将人类可读的多种网址信息,一步 到位地解析成ip::tcp::socket建立连接所需要的ip::tcp::endpoint结构&…

C语言—函数

1.编写一个函数&#xff0c;通过输入一个数字字符&#xff0c;返回该数字29. /*1.编写一个函数&#xff0c;通过输入一个数字字符&#xff0c;返回该数字 */#include <stdio.h>//函数定义,返回类型为int int char_num(char c) {if(c > 0 && c < 9) //检查…

SQL32 截取出年龄(substring_index函数的用法)

代码 select substring_index(substring_index(profile,,,3),,,-1) as age ,count(device_id) from user_submit group by age知识点 substring_index(FIELD, sep, n)可以将字段FIELD按照sep分隔&#xff1a; (1).当n大于0时取第n个分隔符(n从1开始)之前的全部内容&#xff1…

关于umi ui图标未显示问题

使用ant design pro 时&#xff0c;安装了umi ui &#xff0c;安装命令&#xff1a; yarn add umijs/preset-ui -D但是启动项目后&#xff0c;发现没有显示umi ui的图标 找了许多解决方案&#xff0c;发现 umi的版本问题&#xff0c;由于我使用的ant design pro官网最新版本&a…

沐编程APP免费下载|获取免费项目以及技术教程

软件介绍 沐编程专注于分享IT编程相关知识的网站&#xff0c;主要分享毕业设计案例代码&#xff0c;课程设计案例代码&#xff0c;实用功能代码&#xff0c;bug解决方案&#xff0c;编程工具推荐以及编程课程分享等 下载方式 蓝奏云下载&#xff1a;https://wfr.lanzout.com…

python - 文件

In [1]: f open("/etc/passwd","r") #使用open函数打开文件In [2]: f Out[2]: <_io.TextIOWrapper name/etc/passwd moder encodingUTF-8>In [3]: type(f) Out[3]: _io.TextIOWrapperIn [5]: import os #打开文件前可以判断文件在不在In [6]: if …

[ai笔记9] openAI Sora技术文档引用文献汇总

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第9篇分享&#xff01; 这篇笔记承接上一篇技术文档的学习&#xff0c;主要是为了做一个记录&#xff0c;记录下openai sora技术介绍文档提到的一些论文&#xff0c;再此特地记录一下&#xff01; 1 原文…

Sora 文生视频提示词实例集 2

Prompt: Historical footage of California during the gold rush. 加利福尼亚淘金热期间的历史影像。 Prompt: A close up view of a glass sphere that has a zen garden within it. There is a small dwarf in the sphere who is raking the zen garden and creating patter…

MySQL篇之SQL优化

一、表的设计优化 表的设计优化&#xff08;参考阿里开发手册《嵩山版》&#xff09;&#xff1a; 1. 比如设置合适的数值&#xff08;tinyint int bigint&#xff09;&#xff0c;要根据实际情况选择。 2. 比如设置合适的字符串类型&#xff08;char和varchar&#xff09…

pytorch 实现线性回归(深度学习)

一 查看原始函数 初始化 %matplotlib inline import random import torch from d2l import torch as d2l 1.1 生成原始数据 def synthetic_data(w, b, num_examples):x torch.normal(0, 1, (num_examples, len(w)))y torch.matmul(x, w) bprint(x:, x)print(y:, y)y tor…

springboot第55集:思维导图Sharding-JDBC,事务,微服务分布式架构周刊

事务相关知识&#xff0c;你知道多少&#xff1f; 事务定义 在数据库管理系统中&#xff0c;事务是单个逻辑或工作单元&#xff0c;有时由多个操作组成&#xff0c;在数据库中以一致模式完成的逻辑处理称为事务。一个例子是从一个银行账户转账到另一个账户&#xff1a;完整的交…

【ChatGPT】的定价模式:免费还是收费?

ChatGPT的定价模式&#xff1a;免费还是收费&#xff1f; 人工智能技术的快速发展正在为我们的生活带来巨大的变化&#xff0c;而OpenAI最近推出的ChatGPT模型引发了人们对它的定价模式的关注。这篇文章将探讨ChatGPT是免费还是收费的问题&#xff0c;并对这个话题进行深入分析…

阿里云ECS香港服务器性能强大、cn2高速网络租用价格表

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…

免费chatgpt使用

基本功能如下&#xff1a; https://go.aigcplus.cc/auth/register?inviteCode3HCULH2UD

[嵌入式系统-25]:RT-Thread -12- 内核组件编程接口 - 网络组件 - HTTP编程

目录 一、HTTP编程概述 1.1 概述 1.2 HTTP 服务器和 HTTP 客户端 二、HTTP Client 2.1 如何配置HTTP Client 2.2 HTTP Client代码实例1&#xff1a;socket发送http报文 2.3 HTTP Client代码实例2&#xff1a;httpc_xx接口收发HTTP报文 2.3.1 接口函数描述 2.3.2 代码实…

中科大计网学习记录笔记(十二):TCP 套接字编程

前前言&#xff1a;大家看到这一章节的时候一定不要跳过&#xff0c;虽然标题是编程&#xff0c;但实际上是对 socket 的运行机制做了详细的讨论&#xff0c;对理解 TCP 有很大的帮助&#xff1b;但是由于本节涉及到了大量的编程知识&#xff0c;对于一些朋友来说不是很好理解&…

【深度学习】S3 线性神经网络 P1 线性回归(未完)

目录 线性回归基本元素基本名词线性模型 机器学习领域&#xff0c;大多数任务最终的目标都是预测。而预测的结果大致分为两大类&#xff0c;一种是需要估计连续数值的回归预测&#xff0c;另一种是确定离散类别的分类预测。本节博文将围绕线性回归内容。 线性回归基本元素 基…

Nginx (window)2024版 笔记 下载 安装 配置

前言 Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理&#xff08;Reverse Proxy&#xff09;服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。 反向代理方式是指以代理服务器来接受 internet 上的连接请求&#xff0c;然后将请求转发给内部网络上的服…

[AIGC_coze] Kafka 的主题分区之间的关系

Kafka 的主题分区之间的关系 在 Kafka 中&#xff0c;主题&#xff08;Topics&#xff09;和分区&#xff08;Partitions&#xff09;是两个重要的概念&#xff0c;它们之间存在着密切的关系。 主题是 Kafka 中用于数据发布和订阅的逻辑单元。每个主题可以包含多个分区&#x…

【退役之重学前端】关于在控制台得到undefined的事

在浏览器控制台中&#xff0c;undefined 会时不时地&#xff0c;在我不想看到的地方出现。如果你遇到相同的问题&#xff0c;在这篇博客中你会得到答案。 先来看代码块 function test(){} test()//undefined再看下一个代码块 function test(){return 1; } test()//1再来看一个…