Sök…


Introduktion

Lådor är en mycket viktig del av Rust, och varje skaldjur bör veta vad de är och hur man använder dem

Skapa en låda

I stabil rost skapar du en ruta med funktionen Box::new .

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

Använda boxade värden

Eftersom rutor implementerar Deref<Target=T> , kan du använda boxade värden precis som det värde de innehåller.

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

Om du vill mönstra matchning på ett boxat värde, kan du behöva ta bort rutan manuellt.

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),
}

Använda rutor för att skapa rekursiva enums och strukturer

Om du försöker skapa ett rekursivt enum i Rust utan att använda rutan, får du ett sammanställningstidsfel som säger att enum inte kan dimensioneras.

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

För att enum ska ha en definierad storlek måste det rekursivt innehållande värdet ligga i en ruta.

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

Detta fungerar eftersom Box alltid har samma storlek oavsett vad T är, vilket gör att Rust kan ge Listan en storlek.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow