Generics 特征'std::ops::Fn<;(char,)>;`不为`T实现`

Generics 特征'std::ops::Fn<;(char,)>;`不为`T实现`,generics,rust,traits,Generics,Rust,Traits,我正在尝试实现greps项目,我被搜索功能卡住了 fn search<'a, T>(query: &T, contents: &'a str) -> Vec<&'a str> { let mut results = Vec::new(); for line in contents.lines() { if line.contains(query) { results.push(line

我正在尝试实现greps项目,我被搜索功能卡住了

fn search<'a, T>(query: &T, contents: &'a str) -> Vec<&'a str> {
    let mut results = Vec::new();

    for line in contents.lines() {
        if line.contains(query) {
            results.push(line);
        }
    }
    results
}
fn search Vec此函数存在问题(或其中一个问题):

fn search<'a, T>(query: &T, contents: &'a str) -> Vec<&'a str> {
    let mut results = Vec::new();

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

在这之后,您仍然会有更多的错误,但希望这能让您克服最令人困惑的错误。

错误消息非常令人困惑,而且与AFAICT无关;可能想提交一份关于这个问题的错误报告。真正的问题是
str::contains()
想要一个带有的类型,但是
&Path
没有实现这个特性
&str
确实有效,但我不知道这是否真的是你想要的(因此发表评论而不是回答)…嘿,这确实解决了我的问题:有一个疑问,为什么查询路径在这里?因为
run
has
where T:std::convert::AsRef
fn search<'a, T: 'a>(query: &'a T, contents: &'a str) -> Vec<&'a str> 
    where &'a T: Into<&'a str>
{
    let mut results = Vec::new();

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