当前位置: 首页 > 知识库问答 >
问题:

如何将异构类型放入Rust结构中[重复]

微生宝
2023-03-14

我的问题分为两个部分(因为我不能得到第一部分,我移到了第二部分,这仍然让我有疑问)

第1部分:如何将异构结构类型插入HashMap?起初我想通过枚举来完成

例如。,

enum SomeEnum {
    TypeA,
    TypeB,
    TypeC,
}

struct TypeA{}
struct TypeB{}
struct TypeC{}

let hm = HashMap::new();
hm.insert("foo".to_string(), SomeEnum::TypeA);
hm.insert("bar".to_string(), SomeEnum::TypeB);
hm.insert("zoo".to_string(), SomeEnum::TypeC);

但是我得到了一个“预期类型:TypeA,发现类型TypeB”错误

第2部分:然后我去了文档并阅读了《使用允许不同类型值的特征对象》,并将问题简化为只是尝试将异构类型放入Vec中。所以我完全按照教程进行操作,但我仍然会收到相同类型的错误(在文档的情况下,错误现在是“预期类型SelectBox,找到类型Button”

我知道静态类型是Rust的重要组成部分,但是有人能告诉我/展示/推荐我任何关于在< code>Vec或< code>HashMap中放置不同< code>struct类型的信息吗?

共有1个答案

夏侯兴学
2023-03-14

Rust不会为您做任何类型到枚举变量的映射——您需要在枚举本身中显式地包含数据:

use std::collections::HashMap;

enum SomeEnum {
    A(TypeA),
    B(TypeB),
    C(TypeC),
}

struct TypeA {}
struct TypeB {}
struct TypeC {}

fn main() {
    let mut hm = HashMap::new();
    hm.insert("foo".to_string(), SomeEnum::A(TypeA {}));
    hm.insert("bar".to_string(), SomeEnum::B(TypeB {}));
    hm.insert("zoo".to_string(), SomeEnum::C(TypeC {}));
}

这就是说,如果您需要使用这些结构类型的唯一上下文是在使用该枚举时,您可以这样组合它们:

use std::collections::HashMap;

enum SomeEnum {
    A {},
    B {},
    C {},
}

fn main() {
    let mut hm = HashMap::new();
    hm.insert("foo".to_string(), SomeEnum::A {});
    hm.insert("bar".to_string(), SomeEnum::B {});
    hm.insert("zoo".to_string(), SomeEnum::C {});
}
 类似资料:
  • 我想让 data 是全局变量方便调用而不是在函数中传来传去,但 const 和 static 关键字好像都不支持。有什么好办法吗?

  • 本文向大家介绍Rust 结构域,包括了Rust 结构域的使用技巧和注意事项,需要的朋友参考一下 示例 这指定任何给定的实例Struct具有生命周期'a,并且&u32存储在x中的生命周期必须至少为'a。

  • 如何合并数组中的所有结构并生成合并的结构? 例如,使用SparkSQL,我能够读取源json文件并生成数组类型的列,数组中的每个元素都包含一个键:值对。例如,假设我们有一个ArrayType列的值,该列的名称为,值为: 我需要将这个数组类型的列转换为结构类型,其值为{a:1,b:2,c:3}。 由于我是通过读取JSON文件获得模式的,所以我可以使用派生序号获得结果,如: 这个解决方案的问题是,如果

  • 问题内容: 我有以下几种类型: 我可以使用use ,但是我 不能 使用 似乎可以嵌入语法,但是使用它无效吗? 问题答案: 嵌入式类型是(未命名的)字段,由不合格的类型名称引用。 规格:结构类型: 使用类型但没有显式字段名称声明的字段是 匿名字段 ,也称为 嵌入式 字段或该类型在结构中的嵌入。必须将嵌入式类型指定为类型名称或指向非接口类型名称的指针,并且本身不能为指针类型。 非限定类型名称充当字段名

  • 我正在尝试将一个旧的个人Java项目转换为Rust,作为一种学习体验。基本数据结构如下所示: 有一个主要的。有作者列表和书籍列表 每个作者都有一份他/她写过的书的清单 每本书都有作者的参考资料 在Java程序中,我决定程序中的每本书(“霍比特人”)不应该存在多个对象。如果一本新书(可能通过用户输入)进入系统,我要做的第一件事是测试它是否已经在,然后用

  • 我有一个带有MongoDB的Nodejs应用程序。现在我想使用Elasticsearch将数据从mongo复制到Elasticsearch。我正在使用npm软件包“ElasticSearch”。例如,对于收藏“帖子”,我有这样的: 正如您所看到的,我的数据是非结构化的,并且Elasticsearch在我添加这些项时显示了错误。我想要一个把戏关闭弹性搜索限制,允许我添加这些数据。我不能改变我的数据它