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

手机如何做微商城网站国外学做咖啡的网站

手机如何做微商城网站,国外学做咖啡的网站,石狮住房和城乡建设局网站,深圳开发网站开发Rust 将错误分为两大类#xff1a;可恢复的#xff08;recoverable#xff09;和 不可恢复的#xff08;unrecoverable#xff09;错误。对于一个可恢复的错误#xff0c;比如文件未找到的错误#xff0c;我们很可能只想向用户报告问题并重试操作。不可恢复的错误总是 b…Rust 将错误分为两大类可恢复的recoverable和 不可恢复的unrecoverable错误。对于一个可恢复的错误比如文件未找到的错误我们很可能只想向用户报告问题并重试操作。不可恢复的错误总是 bug 出现的征兆比如试图访问一个超过数组末端的位置因此我们要立即停止程序。 Rust 的错误处理主要通过 Result 和 Option 类型来实现。Result 类型表示一个操作可能会成功返回 Ok或失败返回 Err而 Option 类型表示一个值可能存在Some或不存在None。 一、不可恢复异常 C 语言中尝试读取数据结构之后的值是未定义行为undefined behavior。你会得到任何对应数据结构中这个元素的内存位置的值甚至是这些内存并不属于这个数据结构的情况。这被称为 缓冲区溢出buffer overread并可能会导致安全漏洞比如攻击者可以像这样操作索引来读取储存在数据结构之后不被允许的数据。为了保护程序远离这类漏洞如果尝试读取一个索引不存在的元素Rust 会停止执行并拒绝继续。 fn main() {let v vec![1, 2, 3];v[99]; }运行产生异常 thread main panicked at src\main.rs:246:6: index out of bounds: the len is 2 but the index is 99二、可恢复异常 使用result或者option进行异常处理。 fn divide(a: f64, b: f64) - Resultf64, String {if b 0.0 {Err(除数不能为0.to_string())} else {Ok(a / b)} }fn main() {let result divide(10.0, 2.0);match result {Ok(value) println!(结果 {}, value),Err(err) println!(错误 {}, err),} } fn find_index(vec: Veci32, target: i32) - Optionusize {for (index, value) in vec.iter().enumerate() {if value target {return Some(index);}}None }fn main() {let vec vec![1, 2, 3, 4, 5];let index find_index(vec, 3);match index {Some(value) println!(找到目标值索引为 {}, value),None println!(未找到目标值),} } match已经可以判断是否异常但是比较长还有是通过unwarp的方式如果result的值是Ok,那么会返回结果如果是Errunwrap会调用panic! use std::fs::File; fn main() {let greeting_file File::open(hello.txt).unwrap(); }产生异常时 thread main panicked at called Result::unwrap() on an Err value: Os { code: 2, kind: NotFound, message: No such file or directory }, src/main.rs:4:49也可以通过expect方法去自定义异常输出。 三、错误的传播 从一个方法里面抛出了错误外层调用的方法怎么捕获异常类似java的throw try catch fn read_username_from_file() - ResultString, io::Error {let username_file_result File::open(hello.txt);let mut username_file match username_file_result {Ok(file) file,Err(e) return Err(e),};let mut username String::new();match username_file.read_to_string(mut username) {Ok(_) Ok(username),Err(e) Err(e),} }也可以使用简写: ? 运算符 use std::fs::File; use std::io::{self, Read}; fn read_username_from_file() - ResultString, io::Error {let mut username_file File::open(hello.txt)?;let mut username String::new();username_file.read_to_string(mut username)?;Ok(username) }还可以进一步缩短 use std::fs::File; use std::io::{self, Read}; fn read_username_from_file() - ResultString, io::Error {let mut username String::new();File::open(hello.txt)?.read_to_string(mut username)?;Ok(username) }哪里可以使用 ? 运算符 ? 运算符只能被用于返回值与 ? 作用的值相兼容的函数。因为 ? 运算符被定义为从函数中提早返回一个值这与上面写的 match 表达式有着完全相同的工作方式。
http://www.hkea.cn/news/14387047/

相关文章:

  • 国外装修网站建设模板两学一做的做题网站是多少
  • 网站制作 牛商网什么样的公司愿意做网站
  • 手游传奇网站庆阳网站设计价格
  • 常州网站建设哪家好南昌网站建设公司
  • 网站建设甲方给乙方的需求方案各大网站推广软件
  • 娄底网站建设企业深圳网站搜索优化工具
  • 彩票网站建设古大学网站开发开源架构
  • 做网站是怎么赚钱的违法如何搭建一个app
  • 建设纺织原料网站网站开发的完整流程图
  • 郑州设计网站的公司网站建设与运行的盈利收入
  • 网站设计背景东莞南城网站设计
  • 大淘客怎么做网站网络界面设计
  • 网站的设计技术策划如何在解决方案中新建网站
  • 如何查看网站备案wordpress 轻云
  • 网站大数据怎么做的万能浏览器破解版
  • 商务网站建设的六个步骤卖灯杆的做网站好
  • 三里河网站建设公司wordpress调用文章部分内容
  • 直播网站开发多少钱服务器租用价格
  • 网上最好购物网站上海网络推广服务
  • 网站广告做的好的企业案例分析通过输入域名访问自己做的网站
  • 网站有了域名后怎么还上不了自助公益网站建设
  • 湖北seo网站推广北京网站建设推荐华网天下
  • 简答网站内容建设的时候内链重要性招远网站开发
  • 徐州市制作网站的公司山西龙采网站建设合同
  • 网站开发方案ppt哈尔滨网站建设网络优化
  • 手机2345网址大全aso优化贴吧
  • 德州网站怎样建设做中介开什么网站
  • 学做衣服上什么网站中国工商信息注册网
  • 新媒体网站建设费用详单企业信息公开查询
  • wordpress 站内搜索慢家具东莞网站建设