游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Rust学习笔记(五十四)模式(匹配)语法

  匹配字面值
  模式匹配可以直接匹配字面值,例:fnmain(){letx1;matchx{1println!(one),2println!(two),3println!(three),println!(anything),}}匹配命名变量
  命名变量是可匹配任何值的不可辩驳模式,例:fnmain(){letxSome(5);lety10;matchx{Some(50)println!(Got50),Some(y)println!(Matched,y{:?},y),Some(y)匹配的是x,即Some(5),所以此处y是5println!(Defaultcase,x{:?},x),}println!(attheend:x{:?},y{:?},x,y);}
  运行输出:Matched,y5attheend:xSome(5),y10
  因为模式匹配里的y在模式匹配后已走出作用域,后面打印的y是外面的y。多重匹配
  在match表达式中,使用(或)语法,可以匹配多种模式,例:fnmain(){letx1;matchx{12println!(oneortwo),3println!(three),println!(anything),}letxSome(5);matchx{Some(125)println!(here),println!(lalala),}}使用。。来匹配某个范围的值
  例:fnmain(){letx5;matchx{1。。5println!(onethroughfive),println!(somethingelse),}letxc;matchx{a。。jprintln!(earlyASCIIletter),k。。zprintln!(lateASCIIletter),println!(somethingelse),}}解构以分解值
  可以使用模式来解构结构体、枚举、元组,从而引用这些类型值的不同部分。例:structPoint{x:i32,y:i32,}fnmain(){letpPoint{x:0,y:7};letPoint{x:a,y:b}p;asserteq!(0,a);asserteq!(7,b);letPoint{x,y}p;asserteq!(0,x);asserteq!(7,y);matchp{Point{x,y:0}println!(Onthexaxisat{},x),匹配x随意,y是0的情况Point{x:0,y}println!(Ontheyaxisat{},y),匹配y随意,x是0的情况Point{x,y}println!(Onneitheraxis:({},{}),x,y),匹配x随意,y也随意的情况}}解构枚举
  例:enumMessage{Quit,Move{x:i32,y:i32},结构体枚举变体Write(String),ChangeColor(i32,i32,i32),}fnmain(){letmsgMessage::ChangeColor(0,160,255);matchmsg{Message::Quit{println!(TheQuitvarianthasnodatatodestructure。)}Message::Move{x,y}{println!(Moveinthexdirection{}andintheydirection{},x,y);}Message::Write(text)println!(Textmessage:{},text),Message::ChangeColor(r,g,b){println!(Changethecolortored{},green{},andblue{},r,g,b)}}}解构嵌套的结构体和枚举
  例:enumColor{Rgb(i32,i32,i32),Hsv(i32,i32,i32),}enumMessage{Quit,Move{x:i32,y:i32},Write(String),ChangeColor(Color),}fnmain(){letmsgMessage::ChangeColor(Color::Hsv(0,160,255));matchmsg{Message::ChangeColor(Color::Rgb(r,g,b)){println!(Changethecolortored{},green{},andblue{},r,g,b)}Message::ChangeColor(Color::Hsv(h,s,v)){println!(Changethecolortohue{},saturation{},andvalue{},h,s,v)}(),}}解构结构体和枚举
  例:structPoint{x:i32,y:i32,}fnmain(){let((feet,inches),Point{x,y})((3,10),Point{x:3,y:10});}在模式中忽略值
  有几种方式可以在模式匹配中忽略整个值或部分值:配合其它模式使用以开头的名称。。忽略值的剩余部分fnfoo(:i32,y:i32){忽略整个值println!(Thiscodeonlyusestheyparameter:{},y);}fnmain(){foo(3,4);}
  大部分情况当你不再需要特定函数参数时,最好修改签名不再包含无用的参数。在一些情况下忽略函数参数会变得特别有用,比如实现trait时,当你需要特定类型签名但是函数实现并不需要某个参数时。此时编译器就不会警告说存在未使用的函数参数,就跟使用命名参数一样。fnmain(){忽略部分letmutsettingvalueSome(5);letnewsettingvalueSome(10);match(settingvalue,newsettingvalue){(Some(),Some()){只要求settingvalue和newsettingvalue都是Some即可,忽略里面的值println!(Cantoverwriteanexistingcustomizedvalue);}{settingvaluenewsettingvalue;}}println!(settingis{:?},settingvalue);letnumbers(2,4,8,16,32);matchnumbers{(first,,third,,fifth){println!(Somenumbers:{},{},{},first,third,fifth)}}}fnmain(){letx5;开头会忽略未使用的变量lety10;没有,并且未使用的变量会被编译器警告}
  注意,只使用和使用以下划线开头的名称有些微妙的不同:比如x仍会将值绑定到变量,而则完全不会绑定。fnmain(){letsSome(String::from(Hello!));ifletSome(s)s{println!(foundastring);}println!({:?},s);编译器报错,因为变量仍然会被绑定值,所以s的值会移动进s,这时s无法使用了。}fnmain(){letsSome(String::from(Hello!));ifletSome()s{只有下划线不会绑定值,所以通过编译println!(foundastring);}println!({:?},s);}fnmain(){structPoint{x:i32,y:i32,z:i32,}letoriginPoint{x:0,y:0,z:0};使用。。忽略x以外的字段matchorigin{Point{x,。。}println!(xis{},x),}}fnmain(){letnumbers(2,4,8,16,32);matchnumbers{忽略中间的部分(无论中间有多少个),只要第一个和最后一个(first,。。,last){println!(Somenumbers:{},{},first,last);}}}fnmain(){letnumbers(2,4,8,16,32);matchnumbers{存在歧义,因为编译器不知道我们要的是中间的哪一个元素,所以无法编译(。。,second,。。){println!(Somenumbers:{},second)},}}使用match守卫来提供额外的条件
  match守卫就是match分支后额外的if条件,若想要匹配成功该条件也必须满足。match守卫适应于比单独的模式更复杂的场景,例:fnmain(){letnumSome(4);matchnum{Some(x)ifx5println!(lessthanfive:{},x),Some(x)println!({},x),None(),}letx4;letyfalse;matchx{配合多重匹配456ifyprintln!(yes),println!(no),}}绑定
  符号让我们可以创建一个变量,该变量可以在测试某个值是否与模式匹配的同时保存该值。例:fnmain(){enumMessage{Hello{id:i32},}letmsgMessage::Hello{id:5};matchmsg{Message::Hello{id:idvariable3。。7,要求id的值在3到7的范围时,将其值保存在idvariable中}{println!(Foundanidinrange:{},idvariable)}Message::Hello{id:10。。12}{println!(Foundanidinanotherrange)}Message::Hello{id}{println!(Foundsomeotherid:{},id)}}}

海南发布通知!最高奖1万元!符合条件的快去申领根据《海南省2021年度稳定汽车消费措施》有关在使用环节,对在海南销售企业购买新能源汽车并在海南注册登记者给予奖励的要求。5月31日,海南省工信厅、财政厅、公安厅就奖励资金申报……小米11跌至新低价,256GB定价亲民,骁龙8882K屏一亿骁龙888是公认性能最强的安卓阵营芯片了,由于近两年手机更新换代的速度更快了,严格意义上来说,首款骁龙888手机是去年诞生的,它就是小米11,作为去年年末发布的产品,该机发布后……做跨境电商如何选择一个好的产品?跨境电商相对于国内电商而言,需要考虑的维度更多,需要对接的环节及供应链也更复杂,所以产品的选择需要符合跨境电商的特点。那该怎么样选择跨境电商产品呢?以下是我结合同行……阿里事件P7女下属犹如马夫人毁了乔峰,它们有半毛钱的可比性么版权声明,文章转自:记忆承载微信公众号。转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者与我们联系,我们将及时更正、删除,谢谢。我也不知道是……JAVA知识每日一问JDK和JRE的区别是什么?前言JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算……小鹏P7超长续航智能轿跑购车享补贴大礼包!小鹏P7作为小鹏第二代智能汽车,具备四个字方面的领先的能力:【P7的智能驾驶更适应中国本土化路况和驾驶习惯,具有高速自主导航驾驶和超级记忆泊车功能】【智能交互小P可……无钴电池首面市,蜂巢能源成全球唯一产业化企业蜂巢能源在近日的成都车展中宣布,已经开发出全球首款无钴电池包,并将正式搭载欧拉樱桃猫进行量产装车。这一技术已经远超特斯拉、LG化学等公司,成为全球第一。但钴在电池中有着重大的作……为什么铅座上要放两个太空豆?太空豆在台钓线组中的应用太空豆这个词,以及作为钓鱼线组中不可或缺的小配件的出现,应该追溯到上世纪90年代初,随着台钓在中国内地的兴起,而被广大钓友所熟知的。在此之前传统的……月销即将破万,理想ONE会是新能源市场的ampampquot文二哥头9月第一天,理想ONE发布了上月销量,9433辆的成绩排在国内新势力第一名。即使把范围扩大到整个行业,理想ONE也是中大型SUV车型里的排名第一,超越了它的……SummitWireless全新低成本空间音频模块现已震撼上SummitWireless将于1月5日至7日在拉斯维加斯举办的2022年国际消费电子展(CES)上展示该音频模块加利福尼亚州圣何塞市(美国商业资讯)沉浸式空间无线声效技……宁德时代进军换电市场机构建议关注相关个股日前,宁德时代官方消息,宁德时代将于1月18日举办发布会,推出换电品牌EVOGO。据业内人士透露,宁德时代换电将面向全部车企。有分析指出,宁德时代此举意味着其正式进军车电分离的……Python(二十一)MySQL基础人生苦短,每天若纠结于过去的事情,不仅会虚度光阴,还会让周围的人渐而远之,所以祝愿大家都能心中无所求,在最美的年华有明确的方向,做到衷于热爱,忠于自己的内心。MySQL基础:……
直到2010年,国产网游才做出第一个大型副本和如今国内游戏市场百花齐放,端游、页游、手游各种类型皆有精品出现的情景不同,早期互联网刚刚起步,甚至还要靠拨号上网的年代,网络游戏对绝大多数家庭来说是一个新颖且陌生的概念。在这……编程找不到灵感?试试这些游戏!渡一教育没有什么知识是在游戏中学不到的如果有那就多玩几款尼古拉斯亚里士多德赵四小时候,在东北流传着这样一个民间传说:你要什么,你就像什么。妈妈我想要个书包。我看……超越三星霸主的一加飘了?官宣打脸所有粉丝,8Pro用户却笑了近年来,大家对于国产手机的信心是越来越高了,从一开始的疯狂追捧iPhone,到现如今拿出一台旗舰机都能跟苹果手机相比较,这也正是证明,国产正在崛起。而在海外,同样有一个国……亮相即惊艳出场即登顶,华为鸿蒙电视带来极致体验近日,在华为的产品发布会推出了一款智慧屏华为智慧屏V75Super。据悉,华为智慧屏V75Super作为第二代V系列产品的Super版,是一款不止智慧的全新产品。新品在功能互联……网友欲弃魅族买华为Mate20X!黄章魅族16s很快就来!2019年第一季度很快过去了,各大手机厂商趁着第一季度发布了自家旗舰,如小米9、iQOO手机、三星S10等一批搭载骁龙855处理器手机,沉寂已久的魅族近日也开始准备预热魅族16……声音的秘密丨我们如何成就SAUTER之音从挪威奥斯陆歌剧院到慕尼黑国家歌剧院,从悉尼歌剧院到卡内基音乐厅,在世界上许多充满艺术气息的角落,您都可以听到SAUTER(首德)钢琴在舞台上的歌唱。她的声音浑厚有力却又清澈明……别看奇瑞小蚂蚁车型小,设计还是很不错的以前,很多人一提起微型车,就嗤之以鼻,认为微型新能源汽车产品各方面都不行,甚至是设计造型也是烂大街的。但是经过这几年的发展,微型汽车已经得到了非常好的发展。说起微型车,就不得不……新增1亿多亩建设用地从哪来经济日报记者黄晓芳8月26日,全国土地家底公布:第三次全国国土调查数据显示,到2019年末全国耕地19。18亿亩,实现了规划确定的耕地保有量目标,但与第二次国土调查相比,……HUAWEIP20系列国内发布徕卡三摄AI开启智慧摄影新时代4月12日,HUAWEIP20系列在上海东方体育中心正式发布。作为华为2018年度旗舰,HUAWEIP20系列在继承了P系列核心DNA之上,将科技与艺术完美结合,独特的结构色渐……MIUI13延后,将不在8月发布前段时间,大李同学的失误透露,再到MIUI新功能的内测节奏,都指向MIUI13会在8月发布,然而似乎鸽了。小米化爷回复网友,表示MIUI13将给体验优化让路,这可以说算是实锤了……你没见过的Java入门,使用中文例程的教程之八让它更像人一个人还有很多属性:publicclass人{String姓名无名氏;int年龄0;float身高0。0f;privateString小秘密;publicvoid自我介绍(){……通付盾再次荣膺毕马威2018中国领先金融科技企业50强继近期2018年毕马威领先金融科技50企业榜单发布后,毕马威于2019年1月31日下午在上海召开了毕马威中国领先金融科技50企业(华东华西区)颁奖典礼暨研讨会实践金融科技创新,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网