Rust
コンバージョン特性
サーチ…
備考
-
AsRef
とBorrow
は類似していますが、明確な目的を果たします。Borrow
は、複数の借入方法を同様に扱う場合や、借用した値をその所有者のように扱う場合に使用され、AsRef
は参照を汎用化するために使用されます。 -
From<A> for B
Into<B> for A
意味しますが、その逆はできません。 -
From<A> for A
は暗黙的に実装されています。
から
Rust's From
traitは、タイプ間の変換のための汎用的な特性です。任意の2種類のTypeA
とTypeB
、
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::AsRef
とstd::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
だけでなく、 OsStr
、 OsString
、 str
、 String
、およびPathBuf
を暗黙の変換で受け付けるようにFile.open()
が許可されます。これらの型はすべてAsRef<Path>
実装するためです。
借り、BorrowMutとToOwned
std::borrow::Borrow
std::borrow::BorrowMut
std::borrow::Borrow
とstd::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>
を実装できますが、 B
はToOwned
1回しか実装できません。
Deref&DerefMut
std::ops::Deref
とstd::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
、所与のタイプのみの各実施することができる) Deref
とDerefMut
せいぜい一度。