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

老网站做seo能不能重新注册抖音关键词优化

老网站做seo能不能重新注册,抖音关键词优化,wordpress 调用分类列表,织梦做的网站怎么加弹窗Rust 将错误分为两大类:可恢复的(recoverable)和 不可恢复的(unrecoverable)错误。对于一个可恢复的错误,比如文件未找到的错误,我们很可能只想向用户报告问题并重试操作。不可恢复的错误总是 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) -> Result<f64, 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: &Vec<i32>, target: i32) -> Option<usize> {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,那么会返回结果,如果是Err,unwrap会调用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() -> Result<String, 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() -> Result<String, 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() -> Result<String, io::Error> {let mut username = String::new();File::open("hello.txt")?.read_to_string(&mut username)?;Ok(username)
}

哪里可以使用 ? 运算符
? 运算符只能被用于返回值与 ? 作用的值相兼容的函数。因为 ? 运算符被定义为从函数中提早返回一个值,这与上面写的 match 表达式有着完全相同的工作方式。

http://www.ds6.com.cn/news/26686.html

相关文章:

  • 网页中网站设计规划流程矿泉水软文广告500字
  • 360极速浏览器网站开发缓存最新长尾关键词挖掘
  • 邢台企业做网站网站权重优化
  • 临武县网站建设石家庄网站seo
  • 域名停靠应用下载软件大全2023优化seo教程
  • 网站下拉菜单html做多大快速排名上
  • 虚拟主机怎么发布网站吗“跨年”等关键词搜索达年内峰值
  • 做移动网站优化软西安seo外包
  • 青海省建设工程造价网站北京首页关键词优化
  • 青岛做网站公司域名注册查询工具
  • 大连网站设计 仟亿科技移动网站如何优化排名
  • 辽宁沈阳做网站什么叫关键词举例
  • 网站建设网站建设的网络公司手机网页链接制作
  • 阿里绿网网站违规网络营销活动策划方案
  • 一个服务器做一样的网站吗百度识图在线识别网页版
  • 常州营销网站建设百度广告登录入口
  • 如何快速提高网站排名百度怎么推广广告
  • 营销网站建设技术搜易网优化的效果如何
  • 网站建设论文500字推广网站哪个好
  • 装修网站怎么做的好新闻源
  • 中英双语网站建设合同泰安seo网络公司
  • wordpress挖seo排名第一
  • 网站备案全国合作拍照点深圳做网站公司哪家好
  • 有没有在线做动图的网站百度关键词怎么设置
  • 台州城乡建设局网站信息流优化师简历模板
  • 开发一个进销存app需要多少钱图片seo优化是什么意思
  • 网站源码下载 支付二维码怎么弄seo学校
  • 上海市建设人才网站线上营销培训
  • 政府网站建设管理会议主持词6长沙seo培训班
  • 辽阳建设网站公司报价搜索引擎营销的主要方式有哪些?