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); } }
癌症未来可以根治吗?未来世界医学的发展一定是十分巨大的,在癌症治疗方面,也会有越来越多的办法,在癌症根治方面,未来一些癌症肯定会有根治办法出现,但这个过程相对漫长,需要我们进行长期的科学研究才行。癌症
你为什么用华为手机?好用耐用用习惯了不用。性价比不行首先呢,华为手机质量确实是不错,现在都要提倡用国产的产品,必须要支持国货,性价比也是不错!赞赞赞,所以我选用国产的手机,也是比较了解的手机品牌,感觉
216的手机现在能用来干嘛?没用的人就是纸上谈兵,老机虽差也有用武之地。奇客手里就有一台216手机,100块钱入的二手中兴G720C,这手机怎么还不扔呢,因为它有一点很强大,甚至干掉目前市面两千元以上新机!(
请问一只耳正常的,另一只耳听力下降需要配助听器吗?简单说,如果听力损失影响到个人的正常生活,工作交流,就应该选配助听器。是否需要助听器,由每个人的听力损失类型,听损程度,年龄,需求,身体,工作等等因素来决定,不能一概而论。左耳耳朵
什么视频播放器是国内最好用的?在这个颜值即正义的年代,IINA一如原生般简约而现代的播放界面瞬间俘获了我的芳心优雅的播放界面在这美丽而优雅的界面之下,隐藏着一颗强大的内芯和详细完备的功能特性。首先就是IINA使
华为降了公积金,为什么别的小企业纷纷效仿?首先明确一点,降公积金比例是政府为了减小企业人力成本压力而施展的措施,并不需要华为带头,有生存压力的企业自然会做缴存比例的调整,请勿将此归咎于华为带头。其次,华为降低公积金比例其实
湖北考生作弊内幕曝光,为什么大家会更加愤怒?湖北考生作弊内幕曝光,可以说大家的第一反应是惊愕,随之而来的是愤怒。大家所质疑的就是该生如何能够顺利的过五关斩六将,将手机带入考场并将试题上传。还有就是高考如何保证公平公正。一该生
收购珠海银隆对格力电器是福还是祸?按长远发展的方向。以后新能源汽车是首选。现在银隆。公交车上好多城市都有。销量已经排在前3。只要注重研发。发展是有前途的。看好格力。因为他做每件东西都是注重品质。是福是祸首先要看银隆
未来陪伴视障伙伴出门的会是谁?封面图前不久,小米十一周年,雷军以我的梦想,我的选择为主题进行了一场年度演讲。其中有一款黑科技令人印象深刻,即小米首款仿生四足机器人CyberDog,昵称铁蛋。(图)小米Cyber
再见燃油车路特斯计划未来五年推四款纯电动车型创立于1948年的路特斯,旗下的跑车以纯粹的驾驶乐趣和轻量化的设计而著称,但就是这样一家追求极致驾驶乐趣的车企,却也抵挡不住新能源大潮,被迫同流合污。2021年7月,路特斯发布了一
未来需要的是存储空间和节省耗电量我们为什么需要分布式存储?很多人可能从来没有考虑过这个问题,为什么需要分布式存储?实际上,使用分布式存储是被迫的,因为随着互联网的飞速发展应用越来越丰富用户数量越来越多数据也成几何