使用Rust,我如何对返回不同类型的函数执行一组通用操作

问题描述 投票:0回答:1

我是Rust的新手,所以请对我好一点!

我正在尝试编写一个简单的应用程序,该应用程序根据简单的列类型列表生成伪造的表格数据。

例如,具有创建假名称和年龄的功能:

fn name() -> String {
    FirstName(EN).fake()
}

fn age() -> i64 {
    rand::thread_rng().gen_range(0, 100)
}

但是,当尝试使用这些函数根据最终将动态提供的类型列表生成数据时,我在类型系统上苦苦挣扎:

pub fn generate()  {
    let generators = vec!["age", "name"];

    // generate each row
    for _ in 1..10 {
        // generate a value of the given type
        for gen_type in generators.iter() {
            // error[E0308]: match arms have incompatible types
            let generator = match gen_type.as_ref() {
                "age" => age,
                "name" => name,
                _ => println!("Error"),
            };

            let out = generator();

            // eventually I'll want to add some further logic here

            println!("{}", out);
        }
    }
}

我了解问题,generator变量需要具有静态类型,但是不确定如何继续?

我应该将Stringi64封装在通用结构中吗?还是可以以某种方式使用Box?再次,对这个模糊的问题表示歉意-朝正确方向的指针(无双关语)将不胜感激!

rust
1个回答
0
投票

总之,您想要多态性。

© www.soinside.com 2019 - 2024. All rights reserved.