我有一个枚举,我必须在其中执行模式匹配。但是由于我在堆栈内存有限的虚拟机上运行程序(< 4Kb ), i allocated the enum on the heap using
Box
)。但是在执行模式匹配时,我必须取消引用它,这会导致它在我不需要的堆栈上分配。是否可以执行模式匹配关于盒装值?
我想实现如下所示的目标。
pub enum MyEnum {
A,
B,
}
let a = Box::new(MyEnum::A);
let value = match a {
MyEnum::A => 1,
MyEnum::B => 2
}
这是我得到的错误
error[E0308]: mismatched types
--> src/entrypoint.rs:119:9
|
118 | match a {
| ---
| |
| this expression has type `Box<MyEnum>`
| help: consider dereferencing the boxed value: `*a`
119 | MyEnum::A => 1,
| ^^^^^^^^^^^^^^^ expected struct `Box`, found enum `MyEnum`
|
= note: expected struct `Box<MyEnum>`
found enum `MyEnum`
我尝试按照编译器的建议取消引用它,但由于它在取消引用时在堆栈上分配,所以我无法使用它。我想匹配枚举而不取消引用它。
您也可以匹配参考文献。这将简单地重新借用装箱值并在堆栈上最多分配一个指针。
pub enum MyEnum {
A,
B,
}
let a = Box::new(MyEnum::A);
let value = match &*a {
&MyEnum::A => 1,
&MyEnum::B => 2
};