Rust学习笔记(十三)match(模式匹配)
match在Rust中是一个强大的控制流运算符。match允许一个值与一系列模式进行匹配,并执行成功匹配上的模式对应的代码。模式可以是字面值、变量名、通配符... 例: enum Coin { Penny, Nickel, Dime, Quarter, } fn value_in_cents(coin: Coin) -> u8{ match coin { Coin::Penny => 1,//只有一行要执行的代码时可省略`{}`,与下一个模式之间用`,`隔开 Coin::Nickel => 5, Coin::Dime => { println!("{}", 10); 10 }//在Rust中逗号在`{}`后以及最后一个时都可省略 Coin::Quarter => { println!("{}", 25); 25 } } } fn main() { let value = value_in_cents(Coin::Nickel); println!("{}", value); } 绑定值的模式
匹配的分支可以是绑定到被匹配对象的部分值,因此可以从枚举的变体中提取值。例: #[derive(Debug)] enum UsState { Alabama, Alaska, } enum Coin { Penny, Nickel, Dime, Quarter(UsState), } fn value_in_cents(coin: Coin) -> u8 { match coin { Coin::Penny => 1, //只有一行要执行的代码时可省略`{}`,与下一个模式之间用`,`隔开 Coin::Nickel => 5, Coin::Dime => { println!("{}", 10); 10 } //在Rust中逗号在`{}`后以及最后一个时都可省略 Coin::Quarter(state) => {//绑定值 println!("{:#?}", state); 25 } } } fn main() { let value = value_in_cents(Coin::Quarter(UsState::Alaska)); println!("{}", value); } 匹配Option
例: //若传入的Option中有值则值+1,无值则返回None fn plus_one(x: Option) -> Option { match x { Some(value) => Some(value + 1), None => None, } } fn main() { let value = Some(666); let r = plus_one(value); let value1 = None; let r1 = plus_one(value1); println!("{:#?}, {:#?}", r, r1); } match必须穷举所有可能
对上一个例子中的plus_one函数做以下修改: fn plus_one(x: Option) -> Option { match x { Some(value) => Some(value + 1), } }
编译器会给出以下错误提示: error[E0004]: non-exhaustive patterns: `None` not covered --> srcmain.rs:3:11 | 3 | match x { | ^ pattern `None` not covered
所以使用match时必须覆盖所有可能性,不然无法成功编译。若match分支较多,我们不想一一匹配处理,可使用_通配符来代替剩下的还没有列出的值。例: fn main() { let value = 6u8; match value { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"), 4 => println!("four"), 5 => println!("five"), _ => (), }//value是u8类型(0-255),但是我们只想处理1-5, //所以除了1-5都会进入通配符_分支 } if let
如果我们只想处理一种情况,可使用if let语法简化我们的代码。例: fn main() { let value = Some(6u8); if let Some(6) = value { println!("{:#?}", value); } }
此外还可搭配else、else if使用,例: fn main() { let value = Some(7u8); if let Some(6) = value { println!("6 => {:#?}", value); } else if let Some(5) = value { println!("5 => {:#?}", value); } else { println!("_ => {:#?}", value); } }
萌萌的新能源汽车零跑T03总过国内这么多造车新势力,真正做微型车的几乎没有,基本上都是从SUV入手,然后再拓展,在微型车上还是比较空白的状态,这时候零跑T03得到了面世,这也是零跑品牌的第二款车型,定位微型
各大手机品牌公司的成立时间华为成立时间1987年9月15日联想成立时间1984年苹果成立时间1976年4月1日诺基亚成立时间1865年荣耀2013年12月16日成立小米成立时间2010年3月3日红米成立时间
扫地机器人十大排名,清洁地面卫生好方式冰尊扫地机器人是世界扫地机器人十大排名领导品牌。时代的发展,智能扫地机器人因为能自动清洁地面卫生,成为人们追捧的产品。家务活交给它,清洁效果可能比自己亲自上手还要好。那么扫地机器人
五菱汽车布局新能源车,2021年研发支出同比增加近一倍3月31日,五菱汽车(00305。HK)公布2021年度业绩,实现收入为144。09亿元,每股资产净值于年底约为人民币57分,较去年之48分增加。此外,拥有人应占亏损(即归母净利润
松下将再斥资6000亿日元用于电动汽车电池和供应链软件领域的收购松下将再斥资6000亿日元用于电动汽车电池和供应链软件领域的收购科创板日报1日讯,根据周五的一份声明,松下表示将在包括电动汽车电池在内的增长领域投资4000亿日元,并在截至2024
新能源汽车百万辆俱乐部的中国品牌我们将时间拉回到2020年,比亚迪发布了刀片电池,它的出现如同一颗重磅震撼弹,颠覆了外界对磷酸铁锂电池的一贯认知,引领全球动力电池到达了一个安全新高度,而这,仅仅只是比亚迪在推动新
新能源汽车电气系统特点与传统车的区别是什么新能源汽车与传统汽车整车电性能最主要的区分就是三电的不同电驱电池电控。电驱包括传动机构电动机逆变器,电池包括电池模组结构系统电气系统。因此电性能测试的区别也是对应新能源与传统汽车三
新能源汽车们涨价风潮后的用户博弈从进入新年伊始,对于新能源汽车行业发展的乐观,普遍在各大汽车厂商和品牌间蔓延,但是时间过去了一个季度,三个月时间里,汽车行业特别是新能源汽车行业的发展态势发生了变化,重点主要是涨价
长城新能源旗舰车型好猫GT邀你到店品鉴无忧回购!焕新计划!公司全员已进行核酸检测,店内区域已进行全面消杀转介礼老客户推荐新客户购车成功,赠送500元现金或2次保养进店礼试驾礼购车礼等。选车我们更专业!欧拉为你而来,钜惠
美国财政部将俄罗斯最大芯片制造商列入制裁名单据央视新闻,当地时间3月31日,美国财政部表示将制裁俄罗斯网络和科技相关实体和个人。根据声明,本次制裁涉及21个实体和13名个人。美财政部的声明表示,这是以防俄罗斯逃避制裁和采购西
新鲜早科技丨北京4月1日起外卖封签美国司法部对谷歌地图反垄断调查加速东南亚独角兽GoTo即将上市21世纪经济报道数字经济课题组综合报道早上好,新的一天又开始了。在过去的24小时内,科技行业发生了哪些有意思的事情?来跟21tech一起看看吧。巨头风向标1北京4月1日起外卖封签。
AI分析?专家解读?OPPOWatch及时发现健康安全隐患昨天晚上,一年一度的央视315晚会如期而至,在会上,央视曝光了河北沧州青县存在部分经销商贩售瘦肉精羊肉问题,这一关乎我们人民群众的身心健康问题,引发的广大网友的讨论。确实,随着我们
银弹谷零代码开发可以用于什么行业?零代码开发可以用于什么行业?目前,银弹谷VDevSuite零代码软件开发平台已经帮助政府能源建筑交通工程等众多行业的公司开发了人事合同采购印章等多场景的应用软件产品。既能满足人事合
手机app开发从创意到落地要多久?手机app开发从创意到落地要多久?无论是软件开发企业还是用户端企业都十分重视的问题之一。毕竟市场需求变换快,1个月前可能还是流量小生,1个月后却是无人问津的落魄网红,谁能先一步抢占
开发人员的需求与零代码解决方案文章来源银弹谷开发人员的需求与零代码解决方案开发人员任务繁重,需掌握多种开发技术VDevSuite零代码开发平台拥有丰富的可复用资源,大部分可视化操作,无需通过手写代码来完成针对无
开发经理的需求与零代码解决方案文章来源银弹谷开发经理的需求与零代码解决方案开发经理需要先编写各类模块设计接口设计的资料文档,传递给开发人员容易造成信息理解错误。VDevSuite支持开发经理在线编辑模块设计接口
测试人员的需求与零代码解决方案测试人员的需求与零代码解决方案各类测试工具交替使用是测试人员的常态现在银弹谷VDevSuite提供测试一站式云服务解决方案,在线化自动化智能化解决系统测试难题。五大测试云服务一单元
CIO的需求与零代码解决方案CIO的需求与零代码软件开发平台解决方案软件企业负责人往往会关注开发平台是否能够提升开发效率适配多种平台数据库,以及更换新开发平台的成本与风险等等。VDevSuite帮助IT企业在
银行数字化转型解决方案近年来,银行的不良资产回升和利润效益能力下降加剧,使得银行利差进一步缩小,以此同时市场监管的不断升级,银行行业如何在发展的逆境中寻找到突破之路?这条路就是银行数字化转型。银弹谷银行
企业数字化转型通俗理解文章开始之前,先说说数字化转型究竟是不是企业必须的?首先,在当前产业结构由工业生产模式时代到信息化生产升级的大背景下,企业数字化转型必然是大势所趋的,是实现企业可持续发展的创新动力
企业如何进行数字化转型?企业如何进行数字化转型?从哪几个方面下手?具体怎么做?相信很多企业都在不停的打问号!是的,很多人都知道企业能成功进行数字化转型的话,必定能给企业带来巨大的好处,但是却不知道从何下手
银弹谷数字化转型方案怎么写?数字化转型方案怎么写?企业从信息化到数字化转型,企业运营模式有什么转变?明显的就是一个从业务到数据,一个从数据到业务,那么我们就可以认为数字化转型的核心就是数据变现。银弹谷那么数字