TODO

Step 11

编写 search 函数的雏形并逐步完成它。

分成几个小步骤来写



小步骤 1:写出 search 函数的雏形,并加上生命周期

先写上不带生命周期的函数,再加上生命周期标注



小步骤 1 search 函数的雏形 answer
pub fn search(query: &str, contents: &str) -> Vec<&str> {
    vec![]
}


小步骤 1 加上生命周期标注 answer
pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
    vec![]
}



小步骤 2:使用 lines 方法遍历并对比每一行

先用 for 循环遍历 contents.lines(),再对比每一行 line 与 query, 是否 line.contains(query)



小步骤 2 用 for 循环遍历 contents.lines() answer
pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
    for line in contents.lines() {
        // do something with line
    }
}

小步骤 2 使用 query 去比对每一行 answer
pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
    for line in contents.lines() {
        if line.contains(query) {
            // do something with line
        }
    }
}



小步骤 3:存储匹配的行

新建可变变量 results = Vec::new()

在循环中将每一个匹配的行存入其中

并让函数返回这个 results



小步骤 3 answer
pub fn search(query: &str, contents: &str) -> Vec<&str> {
    let mut results = Vec::new();

    for line in contents.lines() {
        if line.contains(query) {
            results.push(line);
        }
    }

    results
}



现在可以运行 cargo test ,测试能通过!

了不起的工作,给自己鼓掌!