我的问题分为两部分(由于我无法获得第一部分,所以我移至第二部分,这仍然给我留下了疑问)
第1部分:如何将异构struct
类型插入HashMap
中?起初我想通过enum
例如,
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);
但是我遇到"Expected type: TypeA, found type TypeB"
错误
第2部分:因此,我去了文档并阅读了Using Trait Objects that Allow for Values of Different Types,并将问题简化为试图将异构类型放入Vec
中。因此,我完全按照教程 进行操作,但是仍然遇到相同类型的错误(对于文档,该错误现在为"Expected type SelectBox, found type Button"
。
我知道静态类型化是Rust的重要组成部分,但是谁能告诉我/向我展示/推荐我任何有关将不同的struct
类型放入Vec
或{{1}中的信息}。
答案 0 :(得分:5)
Rust不会为您做任何类型到枚举变量的映射-您需要在枚举本身中明确包含数据:
var array1 = [];
var array2 = [];
for (let i = 1; i <= 10; i++) {
array1.push(i);
if (i % 2 === 0) {
//console.log(array1);
array2.push(array1);
array1.length = 0;
};
};
console.log(array1);
console.log(array2);
也就是说,如果在使用该枚举时需要使用这些结构类型的 only 上下文,则可以像这样组合它们:
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 {}));
}