加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:36:45 所属栏目:Java 来源:网络整理
导读:参见英文答案 How do I create a heterogeneous collection of objects?????????????????????????????????????1个 在使用Shunting-yard算法将中缀表达式转换为后缀表达式的上下文中.我想使用向量来存储输出,它将存储运算符和数值类型数据. #[derive(Clone,Co
参见英文答案 > How do I create a heterogeneous collection of objects?????????????????????????????????????1个
在使用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());
}

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

>定义to_string()方法
>创建一个向量来存储对数字和运算符的引用.

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

解决方法

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

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

然后在拿出它们时匹配它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读