소개
이 실습에서는 Rust 에서 TryFrom과 TryInto의 사용법을 살펴봅니다. 이들은 타입 간의 오류 가능한 변환을 수행하고 Result 타입을 반환하는 데 사용되는 제네릭 트레이트입니다. i32를 사용자 정의 EvenNumber 구조체로 변환하는 TryFrom 구현을 보여주는 예제 코드를 제공하고, TryFrom과 TryInto를 사용하여 변환을 수행하고 가능한 오류를 처리하는 방법을 보여줍니다.
참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어
main.rs를 사용하고rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.
TryFrom과 TryInto
From과 Into와 유사하게, TryFrom과 TryInto는 타입 간 변환을 위한 제네릭 트레이트입니다. 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(()));
}
요약
축하합니다! TryFrom과 TryInto 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.