TryFrom 및 TryInto

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 Rust 에서 TryFromTryInto의 사용법을 살펴봅니다. 이들은 타입 간의 오류 가능한 변환을 수행하고 Result 타입을 반환하는 데 사용되는 제네릭 트레이트입니다. i32를 사용자 정의 EvenNumber 구조체로 변환하는 TryFrom 구현을 보여주는 예제 코드를 제공하고, TryFromTryInto를 사용하여 변환을 수행하고 가능한 오류를 처리하는 방법을 보여줍니다.

참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어 main.rs를 사용하고 rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.

TryFromTryInto

FromInto와 유사하게, TryFromTryInto는 타입 간 변환을 위한 제네릭 트레이트입니다. From/Into와 달리 TryFrom/TryInto 트레이트는 오류 가능한 변환에 사용되며, 따라서 Result를 반환합니다.

use std::convert::TryFrom;
use std::convert::TryInto;

#[derive(Debug, PartialEq)]
struct EvenNumber(i32);

impl TryFrom<i32> for EvenNumber {
    type Error = ();

    fn try_from(value: i32) -> Result<Self, Self::Error> {
        if value % 2 == 0 {
            Ok(EvenNumber(value))
        } else {
            Err(())
        }
    }
}

fn main() {
    // TryFrom

    assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8)));
    assert_eq!(EvenNumber::try_from(5), Err(()));

    // TryInto

    let result: Result<EvenNumber, ()> = 8i32.try_into();
    assert_eq!(result, Ok(EvenNumber(8)));
    let result: Result<EvenNumber, ()> = 5i32.try_into();
    assert_eq!(result, Err(()));
}

요약

축하합니다! TryFromTryInto 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.