Rust 如何对框进行模式匹配以获得结构';s属性?

Rust 如何对框进行模式匹配以获得结构';s属性?,rust,Rust,我正在尝试访问枚举中已装箱结构的属性,但我不知道如何与std::boxed::Box enum ArithExp { Sum { lhs: Box<ArithExp>, rhs: Box<ArithExp>, }, Mul { lhs: Box<ArithExp>, rhs: Box<ArithExp>, }, Num { val

我正在尝试访问枚举中已装箱结构的属性,但我不知道如何与
std::boxed::Box

enum ArithExp {
    Sum {
        lhs: Box<ArithExp>,
        rhs: Box<ArithExp>,
    },
    Mul {
        lhs: Box<ArithExp>,
        rhs: Box<ArithExp>,
    },
    Num {
        value: f64,
    },
}

fn num(value: f64) -> std::boxed::Box<ArithExp> {
    Box::new(ArithExp::Num { value })
}

let mut number = num(1.0);
match number {
    ArithExp::Num { value } => println!("VALUE = {}", value),
}
enum ArithExp{
总数{
lhs:盒子,
rhs:盒子,
},
骡子{
lhs:盒子,
rhs:盒子,
},
Num{
值:f64,
},
}
fn num(值:f64)->std::boxed::Box{
Box::new(ArithExp::Num{value})
}
设mut number=num(1.0);
匹配号{
ArithExp::Num{value}=>println!(“value={}”,value),
}
我得到以下错误:

错误[E0308]:类型不匹配
-->src/main.rs:22:9
|
22 | ArithExp::Num{value}=>println!(“VALUE={}”,VALUE),
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期结构为'std::boxed::Box',找到枚举'main::ArithExp'`
|
=注意:应为'std::boxed::Box'类型`
找到类型`main::ArithExp`

访问属性的正确方式是什么

您不需要将
enum
框起来:

fn num(value: f64) -> ArithExp {
    ArithExp::Num { value }
}
编译器将给出的错误是关于在
匹配
臂中提供剩余的
枚举
变量。您可以提供每一个,也可以提供一个
\u
arm。。。这意味着“其他任何东西”:


您需要取消对框中值的引用,以便访问框中的内容:

match *number {
    ArithExp::Num { value } => println!("VALUE = {}", value),
    _ => (),
}

@ljedrz我觉得这有点不同。链接的问题是关于模式匹配框本身的。这更多是关于匹配框中的内容。
match *number {
    ArithExp::Num { value } => println!("VALUE = {}", value),
    _ => (),
}