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

淘宝优惠券返利网站怎么做seo综合诊断工具

淘宝优惠券返利网站怎么做,seo综合诊断工具,外贸网店怎么开,三线建设网站Rust学习之实现命令行小工具minigrep(二) Rust学习之实现命令行小工具minigrep(一) 前言 继续记录一下Rust 语言学习过程,上次写了一个命令行查找字符串的小项目minigrep。学习完了闭包(Closures&#x…

Rust学习之实现命令行小工具minigrep(二)

Rust学习之实现命令行小工具minigrep(一)

前言

继续记录一下Rust 语言学习过程,上次写了一个命令行查找字符串的小项目minigrep。学习完了闭包(Closures)和迭代器(Iterators)之后,我们使用这两个技术来改进minigrep这个项目。

本文源码:代码仓库

改进实现

minigrep1 这个项目中,lib.rs文件,我们对Config的build方法中进行改进。

上次我们的代码如下:


pub struct Config {pub query: String,pub file_path: String,pub ignore_case: bool,
}impl Config {pub fn build(args: &[String]) -> Result<Config, &'static str> { // 1if args.len() < 3 {return Err("Not enouth arguments"); // 传入参数不够}let query = args[1].clone();let file_path = args[2].clone();let ignore_case = env::var("IGNORE_CASE=1").is_ok();Ok(Config {query,file_path,ignore_case})}
}

代码里args: &[String] 表示传进来的是字符串的切片引用,而后面的Config 需要拥有queryfile_path 以及ignore_case。所以在代码中不得不克隆一份。

改进build方法

现在可以使用迭代器(Iterators)代替&[String],对这里build方法进行改进,改进步骤如下:

  1. 直接将env::args() 传入 Config::build 方法,env::args() 返回一个Iterator
  2. build 方法声明中,args 参数类型改为impl Iterator<Item = String>
  3. 使用迭代器的next方法获取元素并使用match语法进行匹配

main.rs


use std::env;
use std::process;use minigrep1::Config;fn main() {let args: Vec<String> = env::args().collect();// dbg!(args); // stderr// 传入两个参数// &args 改为 env::args()let config = Config::build(env::args()).unwrap_or_else(|err| {eprintln!("Problem parsing arguments: {}", err);process::exit(1);});if let Err(e) = minigrep1::run(config) {eprintln!("Application error {}", e);process::exit(1)}
}

lib.rs

改进前:


pub fn build(args: &Vec<String>) -> Result<Config, &'static str> {if args.len() < 3 {return Err("Not enouth arguments"); // 传入参数不够}let query = args[1].clone();let file_path = args[2].clone();
}

改进后:

impl Config {pub fn build(mut args: impl Iterator<Item = String>) -> Result<Config, &'static str> {args.next(); // skip the first argumentlet query = match args.next() {Some(arg) => arg,None => return Err("Didn't get a query string"),};let file_path = match args.next() {Some(arg) => arg,None => return Err("Didn't get a file_path string"),};let ignore_case = env::var("IGNORE_CASE=1").is_ok();Ok(Config {query,file_path,ignore_case})}
}

改进search方法

search方法中,是对文本进行遍历,进行判断查找。这里可以用迭代器,还可以用闭包。contents.lines() 返回一个迭代器

用迭代器把之前的for 循环都替换掉,使用filter时使用闭包

pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {contents.lines().filter(|line| line.contains(query)).collect()
}

同理,search_case_insensitive方法也同样使用迭代器和闭包进行修改

改进前:

pub fn search_case_insensitive<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {let mut result = Vec::new();let query = query.to_lowercase();for line in contents.lines() {if line.to_lowercase().contains(&query) {result.push(line);}}result
}

改进后:

pub fn search_case_insensitive<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {let query: String = query.to_lowercase();contents.lines().filter(|line| line.to_lowercase().contains(&query)).collect()
}

总结

项目使用迭代器和闭包优化之后首先代码效率提高了,为了将引用切片转移到Config中需要使用消耗性能的clone方法,现在我们就不需要了。迭代器迭代适配器filter 方法的使用让我们编写更加简明的代码。

http://www.dtcms.com/wzjs/74395.html

相关文章:

  • 大气网站首页欣赏低价刷赞网站推广
  • 品牌设计网站建设微信朋友圈推广文案
  • 怎么样做网站赚钱吗关键词搜索工具
  • 给小孩做辅食的网站成都百度seo推广
  • wordpress站内信网站收录查询平台
  • 怎样做买东西的网站软件开发公司
  • 达尔罕茂明安网站建设广西seo关键词怎么优化
  • 有个蓝色章鱼做标志的网站注册查询网站
  • 如何做好网站的优化疫情最新消息今天封城了
  • 广西 网站开发g3云推广
  • 广东知名网站宁波seo营销平台
  • 广州市城市建设seo好seo
  • 电子购物网站开发如何进行网络推广和宣传
  • wordpress 副标题怎么加分类seo推广优化平台
  • 网站架构设计面试技巧seo网页的基础知识
  • 昆明建站专家百度下载安装2019
  • 网站建设案例收费吗每日一则新闻摘抄
  • 网站建设业务员主动话术北京seo公司公司
  • wordpress用户函数优化网站推广教程排名
  • wordpress图集功能绍兴seo推广
  • 南昌网站建设公司案例优秀的软文广告欣赏
  • 网页游戏知乎新乡seo推广
  • 深圳住房和建设局网站登录google adwords
  • 网站制作的核心技术百度关键词优化技巧
  • 网站1g的空间能用多久黑马程序员培训机构官网
  • quiz在哪个网站做湖南搜索引擎推广平台
  • 东莞网站优化排名公司免费建立个人网站官网
  • 高端网站建设系统规划广东东莞疫情最新情况
  • 建立社会主义市场经济体制seo管理系统创作
  • 公司网站建设需要的材料营销外包团队怎么收费