Suche…


Einführung

Boxen sind ein sehr wichtiger Teil von Rust, und jeder Rustacean sollte wissen, was er ist und wie er verwendet wird

Eine Box erstellen

Im stabilen Rust erstellen Sie eine Box mit der Funktion Box::new .

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

Verwenden von geschachtelten Werten

Da Boxen das Deref<Target=T> implementieren, können Sie Boxed-Werte genauso wie den darin enthaltenen Wert verwenden.

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

Wenn Sie eine Übereinstimmung mit einem geschachtelten Wert erstellen möchten, müssen Sie das Feld möglicherweise manuell dereferenzieren.

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

Verwenden von Boxen zum Erstellen rekursiver Enums und Strukturen

Wenn Sie versuchen, eine rekursive Enumeration in Rust zu erstellen, ohne Box zu verwenden, wird ein Fehler beim Kompilieren angezeigt, der besagt, dass die Enumenzahl nicht dimensioniert werden kann.

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

Damit das Enum eine definierte Größe hat, muss der rekursiv enthaltene Wert in einer Box sein.

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

Das funktioniert, weil Box immer die gleiche Größe hat, egal was T ist, was es Rust ermöglicht, List eine Größe zu geben.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow