rust 如何通过模式匹配Box来获取结构体的属性?

zu0ti5jz  于 2024-01-08  发布在  其他
关注(0)|答案(2)|浏览(100)

我试图访问枚举内装箱结构的属性,但我不知道如何与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),
}

字符串
我得到以下错误:

error[E0308]: mismatched types
  --> src/main.rs:22:9
   |
22 |         ArithExp::Num { value } => println!("VALUE = {}", value),
   |         ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `std::boxed::Box`, found enum `main::ArithExp`
   |
   = note: expected type `std::boxed::Box<main::ArithExp>`
              found type `main::ArithExp`


访问属性的正确方法是什么?

wmvff8tz

wmvff8tz1#

你需要解引用装箱的值,这样你就可以访问盒子里面的内容:

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

字符串
playground

0lvr5msh

0lvr5msh2#

如果你不能或不想移动Box中的项目,你可以引用内容并匹配,而不仅仅是解引用:

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

字符串
这只会给你内容的引用,但通常这就是你所需要的。

相关问题