Foo에 대한 impl TryFrom <Bar> 대 Result <Foo, ()>에 대한 impl From <Bar>의 장단점은 무엇입니까?

지구 엔진

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파이썬에서 'import as foo.bar as bar'와 'from foo import bar'의 차이점은 무엇입니까?

분류에서Dev

bash의 if [ "$ foo"== "bar"]에 대한 구문 오류

분류에서Dev

파이썬의 데코레이터에서 foo = bar (foo)와 something = bar (foo)의 차이점은 무엇입니까?

분류에서Dev

.htaccess 파일에서 "호스트가 foo가 아닌 경우 bar로 리디렉션"에 대한 올바른 구문은 무엇입니까?

분류에서Dev

foo 및 bar를 포함하는 파일에 대한 Ack 구문

분류에서Dev

변수 패턴에 대한 grep : echo "$ {foo}"| grep " '$ {bar}'"

분류에서Dev

스칼라에서 s "foo $ bar"와 "foo % s".format (bar)의 차이점은 무엇입니까?

분류에서Dev

<에 대한 Scala에서 Java 호환 기능은 무엇입니까? 확장 Foo>

분류에서Dev

"FOO = bar.cpp meld a / $ FOO b / $ FOO"가 예상대로 작동하도록하는 방법은 무엇입니까?

분류에서Dev

foo.example.com이 bar.example.com에 대한 쿠키를 설정할 수 있습니까?

분류에서Dev

Boolean (foo.bar)와 !! foo.bar의 차이점은 무엇입니까?

분류에서Dev

네임 스페이스 'bar'의 'Foo'가 헤더 파일의 개체 멤버에 대한 유형 이름을 지정하지 않습니다.

분류에서Dev

C ++ 11에서 auto foo = "bar"대 std :: string 사용

분류에서Dev

다른 2d 배열 foo로 2d 배열 막대 인덱싱 여기서 foo는 bar의 해당 열에 대한 행 색인을 포함합니다.

분류에서Dev

Bash에서 가능한 버그? : foo () {echo "$ {var [0]}"; }; var = (bar baz) foo

분류에서Dev

Groovy에서 "foo? .bar"는 무엇을 의미합니까?

분류에서Dev

JVM의 oopDesc 클래스에 대한 arrowOop의 단점은 무엇입니까?

분류에서Dev

^ foo ^ bar 조합은 Bash에서 무엇을합니까?

분류에서Dev

Android에서 여러 조각에 대한 custom-action-bar를 변경하는 방법은 무엇입니까?

분류에서Dev

팬더에 대한 R which ()의 대안은 무엇입니까?

분류에서Dev

<a>에 대한 onload의 대안은 무엇입니까?

분류에서Dev

HTTPS에 대한 "nc -l"의 대안은 무엇입니까?

분류에서Dev

node 및 express를 사용하여 get (/ foo / : bar) 요청을 처리 할 때 res.render (template)에서 템플릿의 모든 상대 링크는 / 대신 / foo에 상대적입니다.

분류에서Dev

numpy의 다양한 변수에 대해 foo = fun (foo)을 실행하는 방법

분류에서Dev

if의 차이점은 무엇입니까! [[foo]] 및 if [[! Bash에서 foo]]?

분류에서Dev

일반`impl <T : Read + Seek> KaitaiStream for T {}`에 대한 Rust 특성 impl

분류에서Dev

Morris.Bar 함수를 사용하여 Y 축의 각 범주에 대한 카운트 값을 그래프에 표시하는 방법은 무엇입니까?

분류에서Dev

NoMethodError : "foo"에 대한 정의되지 않은 메서드`first_or_create ': String

분류에서Dev

GTest 연결 오류 : 'foo :: function'에 대한 정의되지 않은 참조

Related 관련 기사

  1. 1

    파이썬에서 'import as foo.bar as bar'와 'from foo import bar'의 차이점은 무엇입니까?

  2. 2

    bash의 if [ "$ foo"== "bar"]에 대한 구문 오류

  3. 3

    파이썬의 데코레이터에서 foo = bar (foo)와 something = bar (foo)의 차이점은 무엇입니까?

  4. 4

    .htaccess 파일에서 "호스트가 foo가 아닌 경우 bar로 리디렉션"에 대한 올바른 구문은 무엇입니까?

  5. 5

    foo 및 bar를 포함하는 파일에 대한 Ack 구문

  6. 6

    변수 패턴에 대한 grep : echo "$ {foo}"| grep " '$ {bar}'"

  7. 7

    스칼라에서 s "foo $ bar"와 "foo % s".format (bar)의 차이점은 무엇입니까?

  8. 8

    <에 대한 Scala에서 Java 호환 기능은 무엇입니까? 확장 Foo>

  9. 9

    "FOO = bar.cpp meld a / $ FOO b / $ FOO"가 예상대로 작동하도록하는 방법은 무엇입니까?

  10. 10

    foo.example.com이 bar.example.com에 대한 쿠키를 설정할 수 있습니까?

  11. 11

    Boolean (foo.bar)와 !! foo.bar의 차이점은 무엇입니까?

  12. 12

    네임 스페이스 'bar'의 'Foo'가 헤더 파일의 개체 멤버에 대한 유형 이름을 지정하지 않습니다.

  13. 13

    C ++ 11에서 auto foo = "bar"대 std :: string 사용

  14. 14

    다른 2d 배열 foo로 2d 배열 막대 인덱싱 여기서 foo는 bar의 해당 열에 대한 행 색인을 포함합니다.

  15. 15

    Bash에서 가능한 버그? : foo () {echo "$ {var [0]}"; }; var = (bar baz) foo

  16. 16

    Groovy에서 "foo? .bar"는 무엇을 의미합니까?

  17. 17

    JVM의 oopDesc 클래스에 대한 arrowOop의 단점은 무엇입니까?

  18. 18

    ^ foo ^ bar 조합은 Bash에서 무엇을합니까?

  19. 19

    Android에서 여러 조각에 대한 custom-action-bar를 변경하는 방법은 무엇입니까?

  20. 20

    팬더에 대한 R which ()의 대안은 무엇입니까?

  21. 21

    <a>에 대한 onload의 대안은 무엇입니까?

  22. 22

    HTTPS에 대한 "nc -l"의 대안은 무엇입니까?

  23. 23

    node 및 express를 사용하여 get (/ foo / : bar) 요청을 처리 할 때 res.render (template)에서 템플릿의 모든 상대 링크는 / 대신 / foo에 상대적입니다.

  24. 24

    numpy의 다양한 변수에 대해 foo = fun (foo)을 실행하는 방법

  25. 25

    if의 차이점은 무엇입니까! [[foo]] 및 if [[! Bash에서 foo]]?

  26. 26

    일반`impl <T : Read + Seek> KaitaiStream for T {}`에 대한 Rust 특성 impl

  27. 27

    Morris.Bar 함수를 사용하여 Y 축의 각 범주에 대한 카운트 값을 그래프에 표시하는 방법은 무엇입니까?

  28. 28

    NoMethodError : "foo"에 대한 정의되지 않은 메서드`first_or_create ': String

  29. 29

    GTest 연결 오류 : 'foo :: function'에 대한 정의되지 않은 참조

뜨겁다태그

보관