私は最近、String::find
が実際に所有されている方法String
であることに気づいた。なぜ文字列::は&strのメソッドではないのですか?
しかし、私はそれが単に&str
のメソッドではなく、より多くの場合に便利である(そして依然としてString
として有用である)のはなぜか分かりません。それがなぜこのような理由がないのか、それとも歴史的事故ですか?
私は最近、String::find
が実際に所有されている方法String
であることに気づいた。なぜ文字列::は&strのメソッドではないのですか?
しかし、私はそれが単に&str
のメソッドではなく、より多くの場合に便利である(そして依然としてString
として有用である)のはなぜか分かりません。それがなぜこのような理由がないのか、それとも歴史的事故ですか?
明らかに、ドキュメントがあなたを混乱させました。
だからそれはさえString
のために実装されていませんが、確かにちょうどfor &str
:このメソッドは、このセクションの下に表示されます。それDeref
のため
実際にはstr
にString
でのみ使用可能です:
Methods from Deref<Target=str>
あなたはthe source for Stringでそれを見つけるが、the source for str
ではありません。
実際...あなたは間違っています:String
メソッドではありません。
あなたが見ているのはstr::find
です。
ちょうどので、錆のドキュメントが自動的にString
ページにString
がcan be seen hereとしてDeref<Target=str>
を実装しているという事実によってもたらさメソッドが含まれていることが起こります。
なぜドキュメントにDeref
のターゲットで呼び出すことができるメソッドが含まれていますか?
String
オブジェクトで直接呼び出すことができるので、呼び出し元のメソッドが再帰的に見つからない場合、コンパイラは自動的にDeref
に従うため、オブジェクトを直接呼び出すことができます。
秒でビートしてください:D。 – ljedrz
ああそうです。そんなに多くのメソッドがあると、それを見るのは難しいです。私は、 'str'のための2つのdocページ、プリミティブ' str'とモジュールのために混乱し続けています。 –