小鸭子的学习笔记duck

Duck Blog

唐如飞

( ^∀^)/欢迎\( ^∀^)

79 文章数
14 评论数

Rust-实例

tangrufei
2023-03-09 / 0 评论 / 148 阅读 / 0 点赞

接收命令行参数

/** 用于读取命令行参数的库 */
use std::env; //collect
fn main() {
    let args: Vec<String> = env::args().collect();

     println!("{:#?}", args);
    let query: &String =&args[1];
    let filename:&String=&args[2];
    println!("Searching for {} in {}", query, filename);
}

详细代码

lib.rs

use std::error::Error;
use std::fs;
pub fn run(config: Config)->Result<(),Box<dyn Error>>{
    let contents = fs::read_to_string(config.filename)?;
    for line in search(&config.query,&contents){
    println!("{}",line);
    }
    // println!("With the contents: {}", contents);
    Ok(())
}
pub struct Config{
   pub query: String,
    pub filename: String,

}
impl Config{
    pub fn new(args:&[String]) ->Result<Config,&'static str> {
        if args.len()<3{
            return Err("没有足够的参数")
        }
        let query = args[1].clone();
        let filename=args[2].clone();
        Ok(Config{query,filename})
    }
}
pub  fn  search<'a>(query:&str,contents:&'a str)->Vec<&'a str>{
    let mut results=Vec::new();
   for line in contents.lines(){
      if line.contains(query){
          results.push(line);
      }
   }
    results
}
#[cfg(test)]
mod tests{
    use super::*;
    #[test]
    fn one_result(){
        let query="duct";
        let contents="\\
Rust:\\
safe,fast,productive.
Pick Three.";
        assert_eq!(vec!["safe,fast,productive."],search(query,contents));

    }
}

main.rs

/** 用于读取命令行参数的库 */
use minigrep::Config;
use std::env; //collect
use std::process;

fn main() {
    let args: Vec<String> = env::args().collect();

    let config =Config::new(&args).unwrap_or_else(|err| {
        println!("{}", err);
        process::exit(1);
    });
    if let Err(e)   = minigrep::run(config){
        print!("{}","无法读取文件内容");
        process::exit(1);
    }
}

TDD开发

文章不错,扫码支持一下吧~
上一篇 下一篇
评论
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月