2017-08-05 22 views
-1
let mystring = format!("the quick brown {}", "fox..."); 
    assert!(mystring.ends_with(mystring)); 

エラーのため "特色`のstd ::オプス:: FnMut <(char,)>は `のstd ::文字列:: 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 

答えて

2

そのエラーによりがあります:

| 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` 

批判

note: required because of the requirements on the impl of std::str::pattern::Pattern<'_> for std::string::String

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)); 

を変更した場合ので、そうでなければ」それも理にかなっていますdを渡そうとしている所有者mystringからends_withの機能は正しくないようです。あなたが見ていた特定のエラーについては

Patternの形質定義はまた、一般的な機能がcharを受け入れ、パターンとしてブール値のカウントを返す、Stringはないというメッセージにつながると言う

impl<'a, F> Pattern<'a> for F 
where 
    F: FnMut(char) -> bool, 

を含みその形質の実施に合致する。