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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow