Generics 特征'std::ops::Fn<;(char,)>;`不为`T实现`
我正在尝试实现greps项目,我被搜索功能卡住了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
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
haswhere 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
}