サーチ…


備考

  • AsRefBorrowは類似していますが、明確な目的を果たします。 Borrowは、複数の借入方法を同様に扱う場合や、借用した値をその所有者のように扱う場合に使用され、 AsRefは参照を汎用化するために使用されます。
  • From<A> for B Into<B> for A意味しますが、その逆はできません。
  • From<A> for Aは暗黙的に実装されています。

から

Rust's From traitは、タイプ間の変換のための汎用的な特性です。任意の2種類のTypeATypeB

impl From<TypeA> for TypeB

TypeBのインスタンスがTypeAインスタンスから構築可能であることが保証されていることを示します。 Fromの実装は次のようになります。

struct TypeA {
    a: u32,
}

struct TypeB {
    b: u32,
}

impl From<TypeA> for TypeB {
    fn from(src: TypeA) -> Self {
        TypeB {
            b: src.a,
        }
    }
}

AsRef&AsMut

std::convert::AsRefstd::convert::AsMutは、型を参照に安価に変換するために使用されます。タイプAおよびBについては、

impl AsRef<B> for A

&A&B変換できることを示し、

impl AsMut<B> for A

&mut A&mut B変換できることを示します。

これは、値のコピーや移動をせずに型変換を実行する場合に便利です。標準ライブラリの例は、 std::fs::File.open()です。

fn open<P: AsRef<Path>>(path: P) -> Result<File>

これにより、 Pathだけでなく、 OsStrOsStringstrString 、およびPathBufを暗黙の変換で受け付けるようにFile.open()が許可されます。これらの型はすべてAsRef<Path>実装するためです。

借り、BorrowMutとToOwned

std::borrow::Borrow std::borrow::BorrowMut std::borrow::Borrowstd::borrow::BorrowMut特性は、所有しているタイプのような借用タイプを扱うために使用されます。タイプAおよびBについては、

impl Borrow<B> for A

Bが必要な場合に借用されたAが使用され得ることを示す。たとえば、 std::collections::HashMap.get()get()メソッドにBorrowを使用し、 AキーをA HashMap &B付けてインデックスを付けることができます。


一方、 std::borrow::ToOwnedは逆の関係を実装します。

したがって、前述のタイプAおよびBでは、以下を実現することができる。

impl ToOwned for B

注: Aは複数の異なるタイプTに対してBorrow<T>を実装できますが、 BToOwned 1回しか実装できません。

Deref&DerefMut

std::ops::Derefstd::ops::DerefMut特徴は、間接参照演算子をオーバーロードするために使用されている*x 。タイプAおよびBについては、

impl Deref<Target=B> for A

&Aバインディングの逆参照が&Bを生成し、

impl DerefMut for A

&mut Aバインドの逆参照が&mut Bを生成することを示します。

Deref (RESP。 DerefMut )も可能強制DEREF呼ばれる有用な言語機能、提供&A (それぞれ&mut A )自動的に強制するために&B (それぞれ&mut B )。これは、 Stringから&strへの変換時に&Stringが暗黙的に&strに必要に応じて強制されるときによく使用されます。


注意: DerefMut結果の型を指定してサポートしていない、とそれは同じタイプを使用していますDerefありません。

注:関連するタイプの使用による(とは異なりAsRef 、所与のタイプのみの各実施することができる) DerefDerefMutせいぜい一度。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow