矢量存储Rust中混合的数据类型

ena*_*naJ 4 vector type-conversion rust

在使用Shunting-yard算法将中缀表达式转换为后缀表达式的上下文中.我想使用向量来存储输出,它将存储运算符和数值类型数据.

#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Operator {
    Add,
    Sub,
    Mul,
    Div,
}

fn main() {
    let mut output: Vec<String> = Vec::new();  // create an output vector
    let a = 2;
    let b = Operator::Add;
    let c = 3;
    output.push(a.to_string());
    output.push(b.to_string());
    output.push(c.to_string());
}
Run Code Online (Sandbox Code Playgroud)

上面的代码当然不能编译,因为to_string()没有定义方法Operator.我看到两种解决方法:

  1. 定义一个to_string()方法
  2. 创建一个向量来存储对数字的引用Operator.

我认为第二个是首选,但我不知道创建引用向量是否会引入很多复杂性.

Chr*_*son 9

没有必要使用参考文献; 只需将数字和Operators直接存储在枚举中:

enum Thing {
    Op(Operator),
    Number(i32),
}

fn main() {
    let mut output: Vec<Thing> = Vec::new();
    let a = 2;
    let b = Operator::Add;
    let c = 3;
    output.push(Thing::Number(a));
    output.push(Thing::Op(b));
    output.push(Thing::Number(c));
}
Run Code Online (Sandbox Code Playgroud)

match把它们拿出来然后放在它们身上.