String contains与引用一起使用,但与实际值不一起使用
考虑一个函数,该函数在一个巨大的行字符串中搜索模式,并返回找到匹配项的行:String contains与引用一起使用,但与实际值不一起使用,string,rust,String,Rust,考虑一个函数,该函数在一个巨大的行字符串中搜索模式,并返回找到匹配项的行: fn search_insensitive<'a>(query: &str, content: &'a str) -> Vec<&'a str> { let lowercase_query = query.to_lowercase(); let mut matches: Vec<&str> = Vec::new(); for
fn search_insensitive<'a>(query: &str, content: &'a str) -> Vec<&'a str> {
let lowercase_query = query.to_lowercase();
let mut matches: Vec<&str> = Vec::new();
for line in content.lines() {
let lowercase_line = line.to_lowercase();
if lowercase_line.contains(&lowercase_query) {
matches.push(line)
}
}
matches
}
我检查了包含的函数的定义:
pub fn contains<'a, P: Pattern<'a>>(&'a self, pat: P) -> bool {
pat.is_contained_in(self)
}
pub fn contains>(&'a self,pat:P)->bool{
帕特.是否包含在(自我)中
}
我看不出任何地方需要包含
以获取参考。有人能解释一下吗?因为模式是为&'String
实现的,而不是为String
但是,当我通过值传递错误消息时,我仍然没有得到它们之间的关系
答复
如果您查看docsfor模式,您将看到最后一个文档化的impl是for,这可能解释了为什么编译器选择显示该特定类型。如果编译器说impl Pattern可能会更好,因为Pattern
是为&'a String
实现的,而不是为String
但是,当我通过值传递错误消息时,我仍然没有得到它们之间的关系
答复
如果您查看docsfor模式,您将看到最后一个文档化的impl是for,这可能解释了为什么编译器选择显示该特定类型。如果编译器说impl模式“将其作为值传递”,可能会更好。您必须更多地考虑移动它,而移动值只是为了检查它是否包含某些内容是没有意义的。这就是它作为引用传递的原因。请在询问之前搜索您的错误消息。“将其作为值传递”您必须更多地考虑移动它,而移动值只是为了检查它是否包含某些内容是没有意义的。这就是它作为引用传递的原因。请在询问之前搜索您的错误消息。谢谢。我没有注意到这一点。但是,当我按值传递错误消息时,我仍然无法得到它们之间的关系。如果您查看,您将看到最后一个记录的impl是forFnMut(char)->bool
,这可能解释了编译器选择显示该特定类型的原因。如果编译器说impl-patternThank,可能会更好。我没有注意到这一点。但是,当我按值传递错误消息时,我仍然无法得到它们之间的关系。如果您查看,您将看到最后一个记录的impl是forFnMut(char)->bool
,这可能解释了编译器选择显示该特定类型的原因。如果编译器说impl模式可能会更好