如何与盒装枚举进行模式匹配?

问题描述 投票:0回答:1

我有一个枚举,我必须在其中执行模式匹配。但是由于我在堆栈内存有限的虚拟机上运行程序(< 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`

我尝试按照编译器的建议取消引用它,但由于它在取消引用时在堆栈上分配,所以我无法使用它。我想匹配枚举而不取消引用它。

rust stack smart-pointers heap
1个回答
1
投票

您也可以匹配参考文献。这将简单地重新借用装箱值并在堆栈上最多分配一个指针。

pub enum MyEnum {
  A,
  B,
}

let a = Box::new(MyEnum::A);
let value = match &*a {
  &MyEnum::A => 1,
  &MyEnum::B => 2 
};
© www.soinside.com 2019 - 2024. All rights reserved.