let mystring = format!("the quick brown {}", "fox...");
assert!(mystring.ends_with(mystring));
错误:
the trait `std::ops::FnMut<(char,)>` is not implemented for `std::string::String`
将mystring.ends_with(mystring)
更改为mystring.ends_with(mystring.as_str())
可以解决问题。
为什么这个错误如此神秘?
如果我在不使用格式的情况下创建字符串,请说:
let mystring = String::from_str("The quick brown fox...");
assert!(mystring.ends_with(mystring));
错误更容易理解:
error[E0599]: no method named `ends_with` found for type
`std::result::Result<std::string::String, std::string::ParseError>`
in the current scope
答案 0 :(得分:7)
还有更多错误:
| assert!(mystring.ends_with(mystring));
| ^^^^^^^^^ the trait `std::ops::FnMut<(char,)>` is not implemented for `std::string::String`
|
= note: required because of the requirements on the impl of `std::str::pattern::Pattern<'_>` for `std::string::String`
临界
注意:因
std::str::pattern::Pattern<'_>
std::string::String
的impl要求而需要
String
's .ends_with
接受任何实现Pattern
特征的值作为其搜索模式,String
不实现该特征。
如果查看the documentation for Pattern
,则包括
impl<'a, 'b> Pattern<'a> for &'b String
因此,如果您更改
,则您的代码段正常工作assert!(mystring.ends_with(mystring));
到
assert!(mystring.ends_with(&mystring));
这也很有意义,因为否则您会尝试将mystring
的所有权传递给ends_with
函数,这似乎不对。
至于您看到的具体错误,Pattern
的特质定义还包括
impl<'a, F> Pattern<'a> for F
where
F: FnMut(char) -> bool,
通常表示函数接受char并将布尔计数作为模式返回,导致消息String
与该特征实现不匹配。