Rust
Boxed waarden
Zoeken…
Invoering
Dozen zijn een zeer belangrijk onderdeel van Rust, en elke rustacean moet weten wat ze zijn en hoe ze te gebruiken
Een doos maken
In stabiele Rust maakt u een Box met behulp van de Box::new
functie.
let boxed_int: Box<i32> = Box::new(1);
Boxed-waarden gebruiken
Omdat Boxes de Deref<Target=T>
implementeren, kunt u boxed waarden gebruiken, net als de waarde die ze bevatten.
let boxed_vec = Box::new(vec![1, 2, 3]);
println!("{}", boxed_vec.get(0));
Als u een patroon wilt matchen op een waarde in een vak, moet u het vak mogelijk handmatig verwijderen.
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),
}
Dozen gebruiken om recursieve enums en structuren te maken
Als u probeert een recursief enum in Rust te maken zonder Box te gebruiken, krijgt u een compilatietijd die zegt dat het getal niet kan worden aangepast.
// This gives an error!
enum List {
Nil,
Cons(i32, List)
}
Om de opsomming een gedefinieerde grootte te laten hebben, moet de recursief ingesloten waarde in een kader staan.
// This works!
enum List {
Nil,
Cons(i32, Box<List>)
}
Dit werkt omdat Box altijd dezelfde grootte heeft, ongeacht wat T is, waardoor Rust een grootte aan List kan geven.