수색…
비고
-
AsRef
와Borrow
는 유사하지만 별개의 목적을 제공합니다.Borrow
은 여러 가지 차용 방법을 비슷하게 처리하거나 차용 된 값을 소유 한 것과 같이 취급하는 데 사용되는 반면AsRef
는 참조를 제네릭 화하는 데 사용됩니다. -
From<A> for B
Into<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
각각을 한 번만 구현할 수 있습니다.