Rust 1.34부터 우리는 트레이 트를 구현하여 유형간에 오류가있는 변환을 작성할 수 있습니다 TryFrom
.
struct Foo(i32);
struct Bar;
impl TryFrom<Bar> for Foo {
type Error = ();
fn try_from(_b: Bar) -> Result<Foo, ()> {
Ok(Foo(42))
}
}
Rust 1.41에서는 고아 규칙이 완화되어 다음과 같이 작성할 수도 있습니다.
struct Foo(i32);
struct Bar;
impl From<Bar> for Result<Foo, ()> {
fn from(_b: Bar) -> Result<Foo, ()> {
Ok(Foo(42))
}
}
이 실험 에 따르면 두 솔루션 모두 똑같이 잘 작동하는 것 같습니다.
둘 중 하나 또는 둘 다 접근하는 것의 장단점은 무엇입니까? 둘 중에서 선택하는 방법은 무엇입니까?
이 질문은 생태계에 중요합니다. 예를 들어, 상자 작가 지원 여부에 대한 조언이 필요 TryFrom
, From
또는 둘 모두를. 매크로 작성자는 두 가지 경우 등을 모두 처리해야하는지 알아야합니다. 이것은 오늘날 생태계의 상태에 따라 다르며 쉽게 대답 할 수 없습니다.
에서 TryFrom
오류 유형은 고정 된 관련 -이 유형이다 Bar
. 이것은 경우가 아니며 From
실제로 From
둘 이상의 오류 유형을 구현할 수 있습니다. 그렇게 할 생각이 아니라면 (아주 이상하다) TryFrom
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다