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

创建不同结构的向量的通常方法是什么?[重复]

郜彬
2023-03-14

我想要一个不同类型的结构的集合。

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`

共有1个答案

计阳泽
2023-03-14

通常的方法是为每种类型的结构创建一个包含变体的枚举。处理它们时,需要匹配它们的枚举变体,以确定它们的类型。

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,但无法理解它的原理和优点。

  • 换句话说,为什么重载解决先于访问控制?这很奇怪。你认为是一致的吗?我的代码工作了,然后我添加了一个方法,我的工作代码根本不编译。