Rust
Boxed Werte
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.