수색…
비고
-
AsRef와Borrow는 유사하지만 별개의 목적을 제공합니다.Borrow은 여러 가지 차용 방법을 비슷하게 처리하거나 차용 된 값을 소유 한 것과 같이 취급하는 데 사용되는 반면AsRef는 참조를 제네릭 화하는 데 사용됩니다. -
From<A> for BInto<B> for A에Into<B> for A의미하지만 그 반대는 아닙니다. -
From<A> for A에From<A> for A는 암시 적으로 구현됩니다.
에서
Rust 's From trait은 유형 간 변환을위한 범용 특성입니다. 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>
이렇게하면 File.open() 에서 Path 뿐만 아니라 OsStr , OsString , str , String 및 PathBuf 도 암시 적 변환으로 받아 들일 수 있습니다. 이러한 유형은 모두 AsRef<Path> 구현하기 때문입니다.
Borrow, BorrowMut 및 ToOwned
std::borrow::Borrow 및 std::borrow::BorrowMut 특성은 소유 유형과 같은 빌린 유형을 처리하는 데 사용됩니다. 유형 A 및 유형 B ,
impl Borrow<B> for A
차용 된 A 는 B 가 요구되는 곳에 사용될 수 있음을 나타낸다. 예를 들어 std::collections::HashMap.get() 은 get() 메소드에 Borrow 를 사용하여 A 키가있는 HashMap 에 &B 사용하여 색인을 생성 할 수 있습니다.
반면 std::borrow::ToOwned 는 역 관계를 구현합니다.
따라서 앞서 언급 한 유형 A 와 B 하면 다음을 구현할 수 있습니다.
impl ToOwned for B
주 : A 는 여러 고유 한 유형 T 대해 Borrow<T> 를 구현할 수 있지만 B 는 ToOwned 한 번만 구현할 수 있습니다.
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 ( DerefMut )는 deref 강압 이라고하는 유용한 언어 기능을 제공하여 &A (resp. &mut A )가 자동으로 &B (resp. &mut B )를 강요 할 수있게합니다. 이것은 String 에서 &str 로 변환 할 때 일반적으로 사용됩니다. &String 은 필요에 따라 &str 암시 적으로 강제 변환됩니다.
주 : DerefMut 는 결과 유형 지정을 지원하지 않으며, Deref 와 동일한 유형을 사용합니다.
참고 : 관련 유형 ( AsRef 와 달리)을 사용하기 때문에 특정 유형은 Deref 및 DerefMut 각각을 한 번만 구현할 수 있습니다.