Rust
ボックス化された値
サーチ…
前書き
ボックスは、ルストの非常に重要な部分であり、すべての錆びた人は、自分が何であり、どのように使用するかを知っている必要があります
ボックスの作成
stable Rustでは、 Box::new
関数を使用してBox::new
を作成します。
let boxed_int: Box<i32> = Box::new(1);
ボックス化された値の使用
BoxはDeref<Target=T>
実装しているので、ボックス化された値はその値と同じように使用できます。
let boxed_vec = Box::new(vec![1, 2, 3]);
println!("{}", boxed_vec.get(0));
ボックス化された値に対してパターンマッチを行う場合は、手動でボックスの参照を解除する必要があります。
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),
}
ボックスを使用して再帰的列挙型と構造体を作成する
Boxを使わずにRustで再帰的列挙型を作成しようとすると、列挙型のサイズを変更できないというコンパイル時エラーが発生します。
// This gives an error!
enum List {
Nil,
Cons(i32, List)
}
列挙型が定義されたサイズを持つためには、再帰的に格納された値がBox内になければなりません。
// This works!
enum List {
Nil,
Cons(i32, Box<List>)
}
これは、TがどんなものであってもBoxが常に同じサイズを持つため、RustがListにサイズを与えることができるからです。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow