2016-10-09 5 views
3

私は最近、String::findが実際に所有されている方法Stringであることに気づいた。なぜ文字列::は&strのメソッドではないのですか?

しかし、私はそれが単に&strのメソッドではなく、より多くの場合に便利である(そして依然としてStringとして有用である)のはなぜか分かりません。それがなぜこのような理由がないのか、それとも歴史的事故ですか?

答えて

8

明らかに、ドキュメントがあなたを混乱させました。

Methods from Deref<Target=str>

だからそれはさえStringのために実装されていませんが、確かにちょうどfor &str:このメソッドは、このセクションの下に表示されます。それDerefのため

+1

秒でビートしてください:D。 – ljedrz

+1

ああそうです。そんなに多くのメソッドがあると、それを見るのは難しいです。私は、 'str'のための2つのdocページ、プリミティブ' str'とモジュールのために混乱し続けています。 –

5

実際...あなたは間違っています:Stringメソッドではありません。

あなたが見ているのはstr::findです。

ちょうどので、錆のドキュメントが自動的にStringページにStringcan be seen hereとしてDeref<Target=str>を実装しているという事実によってもたらさメソッドが含まれていることが起こります。


なぜドキュメントにDerefのターゲットで呼び出すことができるメソッドが含まれていますか?

Stringオブジェクトで直接呼び出すことができるので、呼び出し元のメソッドが再帰的に見つからない場合、コンパイラは自動的にDerefに従うため、オブジェクトを直接呼び出すことができます。

関連する問題