在使用调车场算法将中缀表达式转换为后缀表达式的情况下.我想用一个向量来存储输出,它将同时存储运算符和数字类型的数据.

#[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());
}

上述代码当然不会编译,因为没有为Operator定义to_string()方法.我认为有两种方法可以解决这个问题:

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

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

推荐答案

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

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));
}

然后拿出来的时候再加match块.

Rust相关问答推荐

在一个tauri协议处理程序中调用一个rectuc函数的推荐技术是什么?

这个规则关于或模式到底是什么意思?如果表达片段的类型与p_i|q_i...&q;不一致,就会形成

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

为什么';t std::cell::ref使用引用而不是非空?

Rust移动/复制涉及实际复制时进行检测

OpenGL 如何同时渲染无纹理的四边形和有纹理的四边形

Rust: 目标成员属于哪个"目标家族"的列表是否存在?

Rust 打包在 .deb 中

如何在 Rust 中将枚举变体转换为 u8?

Rust/Serde/HTTP:序列化`Option`

如何将 Rust 字符串转换为 i8(c_char) 数组?

判断对象是 PyDatetime 还是 Pydate 的实例?

在 Rust 中,将可变引用传递给函数的机制是什么?

从现有系列和 map 值创建新系列

我如何将特征作为 struct 的拥有字段?

从函数返回 u32 的数组/切片

如何从 many0 传播 Nom 失败上下文?

BigUint 二进制补码

编写 TOML 文件以反序列化为 struct 中的枚举

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?