我想要一个不同类型的结构的集合。
Vec
不起作用,我认为这是因为不同的结构是不同的类型,Vec
,只能包含一种类型。
struct Santa {
color: String,
phrase: String,
}
struct Rudolph {
speed: u32,
lumens: u32,
}
fn newSanta() -> Santa {
Santa {
color: String::from("Red"),
phrase: String::from("Ho ho ho!"),
}
}
fn newRudolph() -> Rudolph {
Rudolph {
speed: 100,
lumens: 500,
}
}
fn main() {
let santa = newSanta();
let rudolph = newRudolph();
let northerners = vec![santa, rudolph]; //fails
}
PS C:\Users\anon> rustc xmas.rs
error[E0308]: mismatched types
--> xmas.rs:27:32
|
27 | let northerners = vec![santa, rudolph]; //fails
| ^^^^^^^ expected struct `Santa`, found struct `Rudolph`
|
= note: expected type `Santa`
found type `Rudolph`
通常的方法是为每种类型的结构创建一个包含变体
的枚举。处理它们时,需要匹配
它们的枚举变体,以确定它们的类型。
struct Santa {
color: String,
phrase: String,
}
struct Rudolph {
speed: u32,
lumens: u32,
}
fn newSanta() -> Santa {
Santa {
color: String::from("Red"),
phrase: String::from("Ho ho ho!"),
}
}
fn newRudolph() -> Rudolph {
Rudolph {
speed: 100,
lumens: 500,
}
}
enum Common {
Santa(Santa),
Rudolph(Rudolph),
}
fn main() {
let santa = newSanta();
let rudolph = newRudolph();
let northerners = vec![Common::Santa(santa), Common::Rudolph(rudolph)];
match &northerners[0] {
Common::Santa(santa) => println!("santa color: {}", santa.color),
Common::Rudolph(rudolph) => println!("rudolph speed: {}", rudolph.speed),
}
}
游乐场
或者,如果它们都实现了一个公共特征,您可以存储它们的特征对象。
问题内容: 我在Go中编写解释器,并且正在寻找惯用的方式来存储AST。我阅读了Go编译器的源代码,似乎他们使用了带有空方法的接口来表示AST。例如,我们具有以下层次结构, 这就是上述层次结构以“空方法”方式实现的方式。 上面的代码是一个人为的示例,这就是Go编译器如何使用许多空方法来实现 AST的方式。但为什么?注意定义了多少个空方法。随着层次结构深度的增加,它可能会变得非常复杂。 注释中指出,空
null 另外,如果使用,是否需要导入文件,或者不导入文件,常量将全局可用? 我可以从逻辑上得出一个结论,即是定义自定义错误域之类的东西时的最佳选择(我真的对吗?)。但其他人呢?
我想知道在静态编程语言中创建全局常量的最佳方法是什么。Java,我们将使用一个包含常量的类,我们只需要导入这个类就可以访问所有常量。但是在静态编程语言中,有两种主要的方法: > 您可以创建一个包含所有常量的对象: 对象常量{const valCONST_1="foo"const valCONST_2="bar"const valCONST_3="toto"} 但这不是推荐的方式,正如一位语言开发者
数据结构中的堆栈是什么?在队列上使用堆栈的重要性是什么?我用C语言创建了stack,但无法理解它的原理和优点。
换句话说,为什么重载解决先于访问控制?这很奇怪。你认为是一致的吗?我的代码工作了,然后我添加了一个方法,我的工作代码根本不编译。