소개
이 랩에서는 구조체에서 라이프타임을 사용하는 것을 보여주는 Rust 코드를 다룹니다. 이 코드에는 i32에 대한 참조를 보유하는 Borrowed라는 구조체가 포함되어 있으며, 이 참조는 구조체 자체보다 오래 지속되어야 합니다. 또한 NamedBorrowed라는 구조체도 있는데, 이 구조체는 i32에 대한 두 개의 참조를 가지며, 두 참조 모두 구조체보다 오래 지속되어야 합니다. 또한, Either라는 열거형이 있는데, 이 열거형은 i32이거나 이에 대한 참조일 수 있으며, 참조는 열거형보다 오래 지속되어야 합니다. 마지막으로, 이 코드는 이러한 구조체와 열거형의 인스턴스를 생성하고 내용을 출력하여 Rust 에서 라이프타임의 사용법을 보여줍니다.
참고: 랩에서 파일 이름을 지정하지 않은 경우, 원하는 파일 이름을 사용할 수 있습니다. 예를 들어,
main.rs를 사용하고rustc main.rs && ./main으로 컴파일하고 실행할 수 있습니다.
구조체 (Structs)
구조체에서 라이프타임 (Lifetimes) 의 주석 (Annotation) 도 함수와 유사합니다.
// `i32` 에 대한 참조를 담는 `Borrowed` 타입.
// `i32` 에 대한 참조는 `Borrowed` 보다 오래 지속되어야 합니다.
#[derive(Debug)]
struct Borrowed<'a>(&'a i32);
// 마찬가지로, 여기 있는 두 참조 모두 이 구조체보다 오래 지속되어야 합니다.
#[derive(Debug)]
struct NamedBorrowed<'a> {
x: &'a i32,
y: &'a i32,
}
// `i32` 이거나 이에 대한 참조인 열거형 (enum).
#[derive(Debug)]
enum Either<'a> {
Num(i32),
Ref(&'a i32),
}
fn main() {
let x = 18;
let y = 15;
let single = Borrowed(&x);
let double = NamedBorrowed { x: &x, y: &y };
let reference = Either::Ref(&x);
let number = Either::Num(y);
println!("x is borrowed in {:?}", single);
println!("x and y are borrowed in {:?}", double);
println!("x is borrowed in {:?}", reference);
println!("y is *not* borrowed in {:?}", number);
}
요약
축하합니다! 구조체 (Structs) 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.