Rust学习笔记(二十六)何时使用panic
总体原则
在定义一个可能失败的函数时,优先考虑返回Result,否则就panic! 编写示例、原型代码、测试
可以使用panic! 演示某些概念可以使用unwrap 编写原型代码:unwrap、except 编写测试代码:unwrap、expect 可以确定返回的Result就是Ok,绝对不会出现Err的情况下:unwrap。例: fn main() { //字符串123一定能被解析成i32类型的123 let f: i32 = "123".parse().unwrap(); } 错误处理的指导性建议
当代码最终可能处于损坏状态时,最好使用panic!宏。损坏状态(Bad state):某些假设、保证、约定或不可变性被打破。例如非法的值、矛盾的值或空缺的值被传入代码,以及下列中的一条: 这种损坏状态并不是预期能够偶尔发生的,即不在预料之中的 发生了之后之后,代码如果处于这种损坏状态就无法运行的情况 使用的类型中没有一个好的方法将这些信息(处于损坏状态)进行编码 场景建议调用你的代码,传入无意义的参数时:panic! 调用外部不可控代码,返回非法状态,你无法修复时:panic! 如果失败是可预期的:Result 当你的代码对值进行操作,首先应该验证这些值的合法性:panic! 为验证创建自定义类型
例: use std::io; fn main() { let mut len = String::new(); loop { io::stdin() .read_line(&mut len) .expect("Failed to read line"); let len: i32 = match len.trim().parse() { Ok(num) => num, Err(_) => continue, }; if len < 0 { println!("边长必须是正数"); continue; } println!("{}", square_area(len)); } } //计算正方形面积 fn square_area(len: i32) -> i32 { len * len }
用户输入正方形边长字符串,然后计算该正方形面积。由于边长是正数,所以我们需要判断用户输入数据的合法性。但是这里的判断,需要每用一次就写一次,比较麻烦。所以我们创建新的类型,把验证逻辑放在构造实例的函数里: use std::io; pub struct Len { value: i32, } impl Len { pub fn new(value: i32) -> Len { if value < 0 { panic!("边长必须是正数"); } Len { value } } //类似于getter方法 pub fn value(&self) -> i32 { self.value } } fn main() { let mut len = String::new(); io::stdin() .read_line(&mut len) .expect("Failed to read line"); let len: i32 = match len.trim().parse() { Ok(num) => num, Err(_) => panic!("can"t parse"), }; let len = Len::new(len); println!("{}", square_area(len.value())); } //计算正方形面积 fn square_area(len: i32) -> i32 { len * len }
此处结构体内的字段不设为pub的原因是:若想在此模块外使用value,只能通过new函数创建实例,然后通过getter方法获取。无法修改其值,这样保证了value肯定要经过值的合法性校验。
丝路视觉数字经济智慧城市虚拟人结合热点与政策,基于基本面挖掘,寻找投机机会。比较偏中线,不是那种一买短期就暴涨的。炒股时间稍微长一些的都大概知道,以前炒虚拟现实,主要是丝路视觉,风语筑,恒信东方等。这一波轰轰烈
美日欲拉小圈子限制高科技对华出口来源人民网人民日报海外版据日本读卖新闻近日报道,日美两国政府正在探讨建立新的高科技出口管制跨国机制,也考虑让有意愿的欧洲国家加入。管控高新技术据读卖新闻报道,美国已经对华为等多家中
科技早报小米有品旗下有品有鱼将于3月停运百度与美团小红书等十余家企业互联互通小米有品旗下有品有鱼将于3月停运1月17日,小米有品旗下新国货会员制电商平台有品有鱼宣布将于3月17日终止运营。公告称,自3月17日10时起,有品有鱼将停止提现服务,关闭服务器,届
水能变成油吗?水能变成油吗?不仅理论上可以,而且确实有水变油的成功实验。我们大概是对几十年前的水变油骗局不能忘怀,一听说这类事情就害怕又被骗。其实将一种物质转变为另一种物质,在理论上是可以的,只
Linux之diff命令diff命令是linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件
特斯拉要求合作律所解雇前SEC律师来源盖世汽车谭璇据华尔街日报报道,特斯拉要求其合作律师事务所CooleyLLP解雇一名律师,否则该律所将失去特斯拉这个客户。特斯拉希望CooleyLLP解雇的律师曾在美国证券交易委
广宇发展置入鲁能新能源和置出23家子公司已完成过户观点网讯1月18日,天津广宇发展股份有限公司发布公告称,重大资产置换及重大资产出售暨关联交易标的资产完成过户。据观点新媒体了解,广宇发展此前将所持全部23家子公司股权置出,置入鲁能
腾讯发寒假未成年网游限玩通知仅周五六日和春节每天1小时新闻页台海网1月17日,腾讯发布寒假游戏限玩通知,寒假期间未成年一共可玩网络游戏14个小时。腾讯表示,结合关于进一步严格管理,切实防止未成年人沉迷网络游戏的通知与实际放假调休安排,
拼服务?多家快递公司加入准时达朋友圈三湘都市报全媒体记者黄亚苹实习生宁瑞欣谭惠洁舍弃价格战之后,快递公司的寄送件服务有了新玩法。最近,通达系快递品牌圆通上线以时效升级精准派送为核心的圆准达服务,这也是继顺丰京东中通后
网传正邦科技借员工名义办理养殖贷公司内部核查中于蒙蒙中国证券报中证网中证网讯(记者于蒙蒙)近期养殖龙头正邦科技出现资金链趋紧的传闻。中国证券报记者获悉,网上流出一组疑似正邦科技内部会议的图片,称临近过年,为了在年前支付工程结算
微信Windows版3。5。0正式版更新PC版可以看视频号了近日,微信向部分用户推送了Windows版3。5。0正式版更新,在该版本中,微信新增了新视频功能,用户可以点击PC版设置中的检测更新来确认是否符合测试资格。获得测试资格的用户,可以