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

怎么描述网站主页做的好优化手机软件

怎么描述网站主页做的好,优化手机软件,漯河商城网站建设,农八师建设兵团社保网站开发环境 Windows 11Rust 1.77.0 VS Code 1.87.2 项目工程 这次创建了新的工程minigrep. 使用环境变量 我们将通过添加一个额外的功能来改进minigrep:一个不区分大小写的搜索选项#xff0c;用户可以通过环境变量打开该选项。我们可以将此功能设置为命令行选项#xff0c;…开发环境 Windows 11Rust 1.77.0 VS Code 1.87.2 项目工程 这次创建了新的工程minigrep. 使用环境变量 我们将通过添加一个额外的功能来改进minigrep:一个不区分大小写的搜索选项用户可以通过环境变量打开该选项。我们可以将此功能设置为命令行选项并要求用户在每次想要应用它时输入它但通过将其设置为环境变量我们允许用户设置一次环境变量并在该终端会话中使他们的所有搜索不区分大小写。 为不区分大小写的search函数编写失败测试 我们首先添加一个新的search_case_insensitive函数当环境变量有值时将调用该函数。我们将继续遵循TDD过程所以第一步是再次编写一个失败的测试。我们将为新的search_case_insensitive函数添加一个新测试并将我们的旧测试从one_result重命名为case_sensitive以阐明两个测试之间的差异如示例12-20所示。 文件名:src/lib.rs #[cfg(test)] mod tests {use super::*;#[test]fn case_sensitive() {let query duct;let contents \ Rust: safe, fast, productive. Pick three. Duct tape.;assert_eq!(vec![safe, fast, productive.], search(query, contents));}#[test]fn case_insensitive() {let query rUsT;let contents \ Rust: safe, fast, productive. Pick three. Trust me.;assert_eq!(vec![Rust:, Trust me.],search_case_insensitive(query, contents));} } 示例12-20:为我们将要添加的不区分大小写的函数添加新的失败测试 请注意我们还编辑了旧测试的contents。我们添加了一个新行文本为“Duct tape”当我们以区分大小写的方式进行搜索时使用不应该与查询“duct”匹配的大写D。以这种方式更改旧测试有助于确保我们不会意外破坏已经实现的区分大小写的搜索功能。这个测试现在应该通过了并且在我们进行不区分大小写的搜索时应该会继续通过。 不区分大小写搜索的新测试使用“rUsT”作为查询。在我们即将添加的search_case_insensitive函数中查询“Rust:”应该与包含大写R的行“rUsT:”匹配并与行“Trust me”匹配。即使两者的大小写与查询不同。这是我们失败的测试它将无法编译因为我们还没有定义search_case_insensitive函数。随意添加一个总是返回空向量的框架实现类似于我们对示例12-16中的search函数所做的那样以查看测试编译和失败。 实现search_case_insensitive函数  示例12-21所示的search_case_insensitive函数与search函数几乎相同。唯一的区别是我们将query和line都小写因此无论输入参数的大小写如何当我们检查该行是否包含查询时它们都是相同的大小写。 文件名:src/lib.rs pub fn search_case_insensitivea(query: str,contents: a str, ) - Veca str {let query query.to_lowercase();let mut results Vec::new();for line in contents.lines() {if line.to_lowercase().contains(query) {results.push(line);}}results }示例12-21:定义search_case_insensitive函数在比较查询和行之前将其小写 首先我们将query字符串小写并将其存储在同名的隐藏变量中。对查询调用to_lowercase是必要的因此无论用户的查询是“rust”、“Rust”、“rUsT”还是“rust”我们都将查询视为“RUST”并且不区分大小写。虽然to_lowercase可以处理基本的Unicode但它不会100%准确。如果我们正在编写一个真正的应用程序我们会想在这里多做一点工作但这一节是关于环境变量的而不是Unicode所以我们将把它留在这里。 请注意query现在是String而不是字符串片段因为调用to_lowercase会创建新数据而不是引用现有数据。例如假设查询是“rUsT”:该字符串片段不包含供我们使用的小写u或t因此我们必须分配一个包含“rust”的新String。当我们现在将query作为参数传递给contains方法时我们需要添加一个符号因为contains的签名被定义为接受一个字符串切片。 接下来我们在line添加一个对to_lowercase的调用以小写所有字符。现在我们已经将line和query转换为小写无论查询的大小写如何我们都将找到匹配项。  让我们看看这个实现是否通过了测试:  $ cargo testCompiling minigrep v0.1.0 (file:///projects/minigrep)Finished test [unoptimized debuginfo] target(s) in 1.33sRunning unittests src/lib.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)running 2 tests test tests::case_insensitive ... ok test tests::case_sensitive ... oktest result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00sRunning unittests src/main.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)running 0 teststest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00sDoc-tests minigreprunning 0 teststest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s 太好了他们通过了。现在让我们从run函数中调用新的search_case_insensitive函数。首先我们将向Config结构添加一个配置选项以在区分大小写和不区分大小写的搜索之间切换。添加此字段将导致编译器错误因为我们还没有在任何地方初始化此字段: 文件名:src/lib.rs pub struct Config {pub query: String,pub file_path: String,pub ignore_case: bool, }我们添加了包含布尔值的ignore_case字段。接下来我们需要run函数来检查ignore_case字段的值并使用它来决定是调用search函数还是search_case_insensitive函数如示例12-22所示。这仍然无法编译。 文件名:src/lib.rs pub fn run(config: Config) - Result(), Boxdyn Error {let contents fs::read_to_string(config.file_path)?;let results if config.ignore_case {search_case_insensitive(config.query, contents)} else {search(config.query, contents)};for line in results {println!({line});}Ok(()) }清单12-22:根据config.ignore_case中的值调用search或search_case_insensitive 最后我们需要检查环境变量。处理环境变量的函数在标准库中的env模块中因此我们将该模块纳入src/lib.rs的顶部。然后我们将使用env模块中的var函数来检查是否为名为IGNORE_CASE的环境变量设置了任何值如示例12-23所示。  文件名:src/lib.rs  use std::env; // --snip--impl Config {pub fn build(args: [String]) - ResultConfig, static str {if args.len() 3 {return Err(not enough arguments);}let query args[1].clone();let file_path args[2].clone();let ignore_case env::var(IGNORE_CASE).is_ok();Ok(Config {query,file_path,ignore_case,})} }清单12-23:检查名为IGNORE_CASE的环境变量中的任何值 在这里我们创建了一个新变量ignore_case。为了设置其值我们调用env::var函数并向其传递IGNORE_CASE环境变量的名称。如果环境变量设置为任意值env::var函数返回的Result将是成功的Ok变量该变量包含环境变量的值。如果未设置环境变量它将返回Err变量。  我们对Result使用is_ok方法来检查是否设置了环境变量这意味着程序应该进行不区分大小写的搜索。如果IGNORE_CASE环境变量未设置为任何值is_ok将返回false程序将执行区分大小写的搜索。我们不关心环境变量的值只关心它是设置的还是未设置的因此我们检查的是is_ok而不是使用unwrap、expect或我们在Result上看到的任何其他方法。  我们将ignore_case变量中的值传递给Config实例这样run函数就可以读取该值并决定是调用search_case_insensitive还是search如示例12-22所示。  完整源码 文件名:src/lib.rs  pub mod cfg {use std::error::Error;use std::env;use std::fs;pub struct Config {pub query: String,pub file_path: String,pub ignore_case: bool,}impl Config {pub fn build(args: [String]) - ResultConfig, static str {if args.len() 3 {return Err(not enough arguments);}let query args[1].clone();let file_path args[2].clone();let ignore_case env::var(IGNORE_CASE).is_ok();Ok(Config {query,file_path,ignore_case,})}}#[cfg(test)] mod tests {use super::*;#[test]fn case_sensitive() {let query duct;let contents \Rust:safe, fast, productive.Pick three.Duct tape.;assert_eq!(vec![safe, fast, productive.], search(query, contents));}#[test]fn case_insensitive() {let query rUsT;let contents \Rust:safe, fast, productive.Pick three.Trust me.;assert_eq!(vec![Rust:, Trust me.],search_case_insensitive(query, contents));} }pub fn searcha(query: str, contents: a str) - Veca str {let mut results Vec::new();for line in contents.lines() {if line.contains(query) {results.push(line);}}results}pub fn search_case_insensitivea(query: str,contents: a str,) - Veca str {let query query.to_lowercase();let mut results Vec::new();for line in contents.lines() {if line.to_lowercase().contains(query) {results.push(line);}}results}pub fn run(config: Config) - Result(), Boxdyn Error {let contents fs::read_to_string(config.file_path)?;let results if config.ignore_case {search_case_insensitive(config.query, contents)} else {search(config.query, contents)};for line in results {println!({line});}Ok(())} }文件名:src/main.rs   use std::env; use std::process; use minigrep::cfg;fn main() {let args: VecString env::args().collect();let config cfg::Config::build(args).unwrap_or_else(|err| {println!(Problem parsing arguments: {err});process::exit(1);});println!(Searching for {}, config.query);println!(In file {}, config.file_path);if let Err(e) cfg::run(config) {println!(Application error: {e});process::exit(1);} } 让我们试一试吧首先我们将在不设置环境变量的情况下运行我们的程序并使用to查询该查询应匹配包含全部小写单词“to”的任何行:  $ cargo run -- to poem.txtCompiling minigrep v0.1.0 (file:///projects/minigrep)Finished dev [unoptimized debuginfo] target(s) in 0.0sRunning target/debug/minigrep to poem.txt Are you nobody, too? How dreary to be somebody!看来这仍然有效现在让我们运行程序将IGNORE_CASE设置为1但仍然使用to。 $ IGNORE_CASE1 cargo run -- to poem.txt如果您使用的是PowerShell则需要设置环境变量并作为单独的命令运行程序: PS $Env:IGNORE_CASE1; cargo run -- to poem.txt这将使IGNORE_CASE在shell会话的剩余部分持续存在。可以使用Remove-Item cmdlet取消设置它: PS Remove-Item Env:IGNORE_CASE我们应该得到包含“to”的行这些行可能包含大写字母: Are you nobody, too? How dreary to be somebody! To tell your name the livelong day To an admiring bog!太好了我们还得到了包含“To”的行我们的minigrep程序现在可以进行由环境变量控制的不区分大小写的搜索。现在您知道了如何使用命令行参数或环境变量来管理选项集。 一些程序允许相同配置的参数和环境变量。在这些情况下程序会决定其中一个优先。对于您自己的另一个练习尝试通过命令行参数或环境变量来控制大小写。如果程序运行时一个设置为区分大小写一个设置为忽略大小写请确定是命令行参数还是环境变量优先。  std::env模块包含许多更有用的处理环境变量的特性:查看其文档以了解可用的特性。  本章重点 环境变量的意义编写不区分大小写的search函数不区分大小写search函数的实现思路通过添加环境变量的方式实现
http://www.w-s-a.com/news/718811/

相关文章:

  • 万网是做什么的seo综合
  • 网站关键词分隔符php网站开发平台下载
  • 郑州那家做网站便宜商业计划书免费word版
  • 秦时明月的个人网站怎么做网站开发公司需要招聘哪些人
  • 广告网站建设制作设计服务商安卓app软件定制
  • 公司网站设计与实现中国职业培训在线官方网站
  • 网站服务器空间租用郑州官网网站推广优化
  • 郑州网站建设外包业务wordpress站酷首页
  • 机关门户网站 建设 方案个人怎么申请注册商标
  • 梧州网站建设有哪些九江网站建设优化
  • APP网站建设开发企业发展英文seo招聘
  • 临海市住房和城乡建设规划局网站高校图书馆网站的建设方案
  • 建立门户网站张店易宝网站建设
  • wordpress中英文站点厦门seo顾问屈兴东
  • 邯郸网站建设项目重庆网站备案系统
  • 网站导航容易做黄冈网站建设报价
  • 美橙互联建站网站被截止徐州网站建站
  • 网站班级文化建设视频深圳企业网页设计公司
  • 钦州网站建设公司做宣传网站买什么云服务器
  • 58同城有做网站wordpress怎么改标题和meta
  • 安通建设有限公司网站东莞地铁app
  • 群晖nas做网站滨州教育平台 网站建设
  • 住房城市乡建设部网站装修平台有哪些
  • 小米网站 用什么做的深圳广告公司前十强
  • 勤哲网站开发视频瑞安 网站建设培训
  • 有个蓝色章鱼做标志的网站高端的网站建设怎么做
  • 建站网址导航hao123html网页设计实验总结
  • 西宁市网站建设价格丽水集团网站建设
  • 长宁怎么做网站优化好本机怎么放自己做的网站
  • 诚信网站备案中心网站字体怎么设置