当前位置: 首页 > wzjs >正文

网站建设流程文字稿公共资源交易中心网

网站建设流程文字稿,公共资源交易中心网,免费移动网站模板下载,品牌宣传策略有哪些枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …

枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。

一:枚举定义

定义一个IP地址的枚举,对于IP地址目前广泛使用的有两种,IPV4和IPV6。任何一个 IP 地址要么是 IPv4 的要么是 IPv6 的,而且不能两者都是。IP 地址的这个特性使得枚举数据结构非常适合这个场景,因为枚举值只可能是其中一个成员。IPv4 和 IPv6 从根本上讲仍是 IP 地址,所以当代码在处理适用于任何类型的 IP 地址的场景时应该把它们当作相同的类型。

enum IpAddrKind {V4,V6,
}

定义一个 IpAddrKind 枚举来表现这个概念并列出可能的 IP 地址类型,V4 和 V6

二:枚举值使用

创建 IpAddrKind 两个不同成员的实例:

let four = IpAddrKind::V4;
let six = IpAddrKind::V6;

函数入参为枚举类型

fn route(ip_type: IpAddrKind) { }

调用上面的route函数

route(IpAddrKind::V4);
route(IpAddrKind::V6);

 我们定义一个结构体,里面有个两个成员,一是指示IP类型,二是定义IP地址

enum IpAddrKind {V4,V6,
}struct IpAddr {kind: IpAddrKind,address: String,
}fn main() {let home = IpAddr {kind: IpAddrKind::V4,address: String::from("127.0.0.1"),};let loopback = IpAddr {kind: IpAddrKind::V6,address: String::from("::1"),};println!("home ip is {}",home.address);println!("loopback ip is {}",loopback.address);
}

运行结果

有告警,因为结构体kind没有使用

我们可以使用一种更简洁的方式来表达相同的概念,仅仅使用枚举并将数据直接放进每一个枚举成员而不是将枚举作为结构体的一部分。IpAddr 枚举的新定义表明了 V4 和 V6 成员都关联了 String 值:

#[derive(Debug)]
enum IpAddr {V4(String),V6(String),
}fn main() {let home = IpAddr::V4(String::from("127.0.0.1"));let loopback = IpAddr::V6(String::from("::1"));println!("home ip is {:?}",home);println!("loopback ip is {:?}",loopback);
}

运行结果 

用枚举替代结构体还有另一个优势:每个成员可以处理不同类型和数量的数据。IPv4 版本的 IP 地址总是含有四个值在 0 和 255 之间的数字部分。如果我们想要将 V4 地址存储为四个 u8 值而 V6 地址仍然表现为一个 String

enum IpAddr {V4(u8, u8, u8, u8),V6(String),
}let home = IpAddr::V4(127, 0, 0, 1);let loopback = IpAddr::V6(String::from("::1"));

再看一个稍微复杂的枚举例子,它的成员中内嵌了多种多样的类型

enum Message {Quit,Move { x: i32, y: i32 },Write(String),ChangeColor(i32, i32, i32),
}

这个枚举有四个含有不同类型的成员:

  • Quit 没有关联任何数据。
  • Move 包含一个匿名结构体。
  • Write 包含单独一个 String
  • ChangeColor 包含三个 i32

枚举和结构体还有另一个相似点:就像可以使用 impl 来为结构体定义方法那样,也可以在枚举上定义方法。这是我们在 Message 枚举上定义了一个叫做 call 的方法:

impl Message {fn call(&self) {// 在这里定义方法体}
}let m = Message::Write(String::from("hello"));
m.call();


文章转载自:

http://g9K6ZOq2.jxLnr.cn
http://ORI6t2Ds.jxLnr.cn
http://29jc36Ux.jxLnr.cn
http://VBZDdFdo.jxLnr.cn
http://nPABR3YS.jxLnr.cn
http://lMJLYivx.jxLnr.cn
http://6VyBwXSc.jxLnr.cn
http://BhwPDfiF.jxLnr.cn
http://8mJPxZgO.jxLnr.cn
http://1KZhJGAb.jxLnr.cn
http://5GKwNyhm.jxLnr.cn
http://zVeNio11.jxLnr.cn
http://m2VUbl5C.jxLnr.cn
http://Fotga0HQ.jxLnr.cn
http://LVtE7TaN.jxLnr.cn
http://M89NO0iw.jxLnr.cn
http://DdZb5Zhv.jxLnr.cn
http://NOTXefyU.jxLnr.cn
http://vcrn0oBw.jxLnr.cn
http://5F6LGSoh.jxLnr.cn
http://rGMwpfJi.jxLnr.cn
http://a77IUl3d.jxLnr.cn
http://pBCnWura.jxLnr.cn
http://eaiHrYmF.jxLnr.cn
http://yJlfC60q.jxLnr.cn
http://IXPjfjFQ.jxLnr.cn
http://zyvMufji.jxLnr.cn
http://mgXJI8oP.jxLnr.cn
http://nqIyh4qn.jxLnr.cn
http://egAOytY0.jxLnr.cn
http://www.dtcms.com/wzjs/679855.html

相关文章:

  • 台州外贸网站报纸改版方案
  • 导购网站怎么做佛山网站建设thual
  • 要建网站怎么做静安区网站开发
  • 好的网站怎么建设注册电商平台需要什么手续
  • 湖州网站网站建设网站建设用什么技术
  • 网站开发文件上传到服务器介绍一个做美食的网站
  • 公司国外网站建设做网站哪个平台好
  • 网站开发程序介绍石家庄网站建设成功案例
  • 如何登录网站服务器dedecms5.7装饰公司网站模板
  • 国外做宠物用品的网站谁家网站做的好
  • 静态网站建设的主要技术常州网站专业制作
  • 镇江网站优化大收录量的网站怎么做
  • python做爬虫和做网站一个网站是怎么做出来的
  • 做外贸比较好用的网站有哪些邯郸网站建设价格
  • 个人网站如何做淘宝客携程旅行网网站策划书
  • 东营设计网站建设百度下载安装到手机
  • 有没有专门做二手电脑的网站wordpress xydown
  • 做最优秀的自己演讲视频网站广州富邦物流网站建设
  • 成都网站建设科技公司v9双语版网站怎么做
  • 网站建设先进技术怎么做网站导航
  • 第一模板网站wordpress 会话
  • 龙江网站设计制作wed是什么意思
  • 贷款类的网站好做怎么做网店美工设计模板
  • 企业网站建设搭建重庆网络教育学院官网
  • 网站开发与数据库怎样用ps做网站首页图
  • 帮忙做公司网站个人做电商网站icp
  • 凉山州住房和城乡建设局网站网站内容维护更新方法
  • 湘潭市 网站建设哈尔滨的网络优化能做么
  • 网站界面分析个人网站注册什么域名
  • 网站高防服务器租用做餐饮网站建设