Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何将异构类型放入锈蚀结构中_Rust - Fatal编程技术网

Rust 如何将异构类型放入锈蚀结构中

Rust 如何将异构类型放入锈蚀结构中,rust,Rust,我的问题分为两部分(因为我没能得到第一部分,所以我转到了第二部分,这仍然给我留下了问题) 第1部分:如何将异构的struct类型插入HashMap?起初我想通过一个enum 例如: 但是我得到一个“预期类型:TypeA,发现类型TypeB”错误 第二部分:然后我去看了文档,继续阅读,并将问题简化为将异构类型放入Vec。因此,我完全按照教程进行了操作,但仍然得到了相同类型的错误(对于文档,错误现在是“Expected type SelectBox,found type Button”) 我知道静态

我的问题分为两部分(因为我没能得到第一部分,所以我转到了第二部分,这仍然给我留下了问题)

第1部分:如何将异构的
struct
类型插入
HashMap
?起初我想通过一个
enum

例如:

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

第二部分:然后我去看了文档,继续阅读,并将问题简化为将异构类型放入
Vec
。因此,我完全按照教程进行了操作,但仍然得到了相同类型的错误(对于文档,错误现在是
“Expected type SelectBox,found type Button”


我知道静态类型是Rust的重要组成部分,但是有谁能告诉我/给我看/让我参考任何与将不同的
struct
类型放入
Vec
HashMap

中相关的信息吗?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 {});
}

“Rust不会为您将结构名称映射到枚举变量-您需要在枚举本身中显式包含数据:”否?@Stargateur:详细说明?对我来说,这个问题听起来像是他们试图在哈希映射中插入三种不同的类型,这要求他们要么使用trait对象,要么将其三种类型包装在一个枚举中(后者就是我在回答中所显示的)。也许“Rust不会为你做任何类型到枚举变量的映射”不过,用一个更好的方式来表达我所说的话。好吧,做得很好……有些是常见的type@Stargateur:但是没有使用任何结构(请参阅编译器警告)。枚举变量
SomeEnum::TypeA
和结构
TypeA
之间没有定义实际的关系,它们只是有相同的名称。哦,对不起,我完全错了
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 {});
}