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

在 Rust 中列出不同类型的列表 [重复]

锺离自明
2023-03-14

在C#中,我可以制作一个列表并向其添加不同类型的项。只要它们继承基类即可。例如:

using System;
using System.Collections.Generic;

class Parent
{
    public int p;

    public Parent(int p)
    {
        this.p = p;
    }
}

class A : Parent
{
    public int a;

    public A(int p, int a) : base(p)
    {
        this.a = a;
    }
}

class B : Parent
{
    public int b;

    public B(int p, int b) : base(p)
    {
        this.b = b;
    }
}

class Program
{
    static void Main(string[] args)
    {
        List<Parent> list = new List<Parent>();

        A a = new A(10, 20);
        B b = new B(30, 40);
        list.Add(a);
        list.Add(b);

        A l_a = list[0] as A;
        B l_b = list[1] as B;

        Console.WriteLine(String.Format("{0}, {1}", l_a.p, l_a.a)); // 10, 20
        Console.WriteLine(String.Format("{0}, {1}", l_b.p, l_b.b)); // 30, 40
    }
}

Rust不是面向对象编程语言,但我想知道是否可以实现类似的功能。有办法吗?

共有1个答案

汲品
2023-03-14

您可以创建枚举并将其不同的变体存储在向量中。

示例

use std::fmt::{Display, Formatter};

struct A {
    a: i32,
}

impl A {
    fn new(a: i32) -> Self {
        A { a }
    }
}

struct B {
    b: i32,
}

impl B {
    fn new(b: i32) -> Self {
        B { b }
    }
}

enum Parent {
    ChildA(i32, A),
    ChildB(i32, B),
}

impl Display for Parent {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        match self {
            Parent::ChildA(p, a) => write!(f, "{}, {}", p, a.a),
            Parent::ChildB(p, b) => write!(f, "{}, {}", p, b.b),
        }
    }
}

fn main() {
    let mut vec = Vec::new();

    let a = Parent::ChildA(10, A::new(20));
    let b = Parent::ChildB(30, B::new(40));

    vec.push(a);
    vec.push(b);

    let l_a = vec.get(0).unwrap();
    let l_b = vec.get(1).unwrap();

    println!("{}", l_a);
    println!("{}", l_b);
}
 类似资料:
  • 我正在对地图执行firestore查询 没有人工作过,任何帮助都是感激的 谢谢你抽出时间

  • 我试图创建动态下拉,其值是从使用微服务的查找表之一填充,但我已经尝试了许多方式相同,到目前为止,我还没有成功地使其工作。 下面的代码用于调用webservice 这是我的对象类型 仅用于显示目前运行的以下代码 我做了什么我尝试调用webservice在多种方式调用它,尝试铸造服务响应直接使用JSON字符串响应和可能的事情我尝试过。 你能在这里帮忙吗?我们将不胜感激。

  • 问题内容: 我正在尝试开发一种通用的表加载器,其架构在运行时是已知的。这需要具有包含不同类型的元素的列表,并支持各种get和诸如集方法的类,,。元素我考虑的类型有,,,和,和。每个元素的实际类型在运行时都是已知的,我将它们存储在一个List中,描述其架构以进行进一步处理。 我的问题是:我应该在或中存储这样的元素列表吗?还是有更好的方法来实现此类? 问题答案: 由于您的类的共同祖先是,并且由于不会使

  • 我正在尝试合并两个不同类型的列表。我得到了两个不同的API响应从改造在一个android应用程序,第一个列表是一个电影列表定义为 公共类列表{ 我通过以下操作成功地从API中检索到列表 然后,我尝试将一个类型列表和一个类型字符串列表组合起来,以创建一个新类ListingAndImage(字符串是一个URL,我将加载到imageview中) 我的问题是,哪种方式最好将这两个列表组合起来,形成一个列表

  • 问题内容: 我在解组JSON结构时遇到了麻烦: 我实际上需要结果中的第二个切片项。 我目前的尝试是 输出是这样的: 但是我也尝试使用这个: 输出正常: 我还可以引用Result [1]索引: 但是我无法将接口类型转换为任何其他匹配类型。谁能告诉我如何进行界面转换。哪种方法才是“最佳”。 问题答案: 一种选择是将顶级事物解组为最初的一部分。 然后遍历成员,并查看每个成员的第一个字符。如果它是一个对象

  • 问题内容: 有没有办法告诉Hibernate在使用to_char将列连接到另一个表或将NUMBER转换为VARCHAR时将其包装?我遇到的情况是,我的一个表包含一个类型为VARCHAR的通用键列,该列存储另一个表的ID(即Number)。当Hibernate执行它生成的SQL时,我收到一个SQL异常,该SQL使用’=’比较两列。 谢谢… PS:我知道这不是理想的选择,但是我坚持使用模式,因此必须对