수색…


소개

상자는 녹의 매우 중요한 부분이며 모든 녹스장은 자신의 존재와 사용 방법을 알아야합니다.

상자 만들기

stable Rust에서는 Box::new 함수를 사용하여 Box::new 를 만듭니다.

let boxed_int: Box<i32> = Box::new(1);

박스형 값 사용

Box는 Deref<Target=T> 구현하기 때문에 포함 된 값과 같은 박스형 값을 사용할 수 있습니다.

let boxed_vec = Box::new(vec![1, 2, 3]);
println!("{}", boxed_vec.get(0));

박스형 값에 패턴 매치를하려면 수동으로 상자를 역 참조해야 할 수 있습니다.

struct Point {
    x: i32,
    y: i32,
}

let boxed_point = Box::new(Point { x: 0, y: 0});
// Notice the *. That dereferences the boxed value into just the value
match *boxed_point {
    Point {x, y} => println!("Point is at ({}, {})", x, y),
}

상자를 사용하여 재귀 열거 형 및 구조체 만들기

Box를 사용하지 않고 Rust에서 재귀 열거 형을 만들면 열거 형의 크기를 조정할 수 없다는 컴파일 타임 오류가 발생합니다.

// This gives an error!
enum List {
    Nil,
    Cons(i32, List)
}

열거 형이 정의 된 크기를 가지려면 재귀 적으로 포함 된 값이 상자에 있어야합니다.

// This works!
enum List {
    Nil,
    Cons(i32, Box<List>)
}

이것은 Rust가 List에 크기를 줄 수 있도록 Box가 항상 T가 무엇이든간에 같은 크기를 가지기 때문에 가능합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow