如何使用变量作为其他变量的数据类型?

时间:2019-09-27 17:59:03

标签: variables rust

如果变量data_type中存储了某种数据的数据类型,该如何用该变量中定义的数据类型创建一个新变量?

例如:

struct a {
    var: String,
}
struct b {
    var: String,
}

let var_type = "a";
let variable: var_type { var: "abc" };  // creates struct var_type

3 个答案:

答案 0 :(得分:3)

只要您在编译时就知道所有类型,就可以根据数据中的某些值将非结构化数据转换为类型化数据。这正是流行的serde crate

所做的

在不知道用例的情况下,很难精确地解决该问题,但是下面的代码给出了两个有关如何使用枚举完成类型映射的示例(尽管可以使用match将任何数据映射到已知的任何类型)在编译时)。

enum VarType {
    A(String),
    B(String),
    Unknown(String),
}

fn main() {
    let _var1 = VarType::A("abc".to_string());
    let _var2 = VarType::B("xyz".to_string());

    let data = vec![("a", "abc"), ("b", "xyz")];

    for item in data {
        let (data_type, value) = item;
        match data_type {
            "a" => VarType::A(value.to_string()),
            "b" => VarType::B(value.to_string()),
            _ => VarType::Unknown(value.to_string()),
        };
    }
}

答案 1 :(得分:2)

作为Isak van Bakel,大多数人说锈是静态的。但是,如果您具有所有可能结构的列表,则可以。 (假设您在这里使用Serde!)。目前有 讨论多态反序列化here的一个有趣问题,我建议您看一下,因为它可能会有所帮助!

答案 2 :(得分:0)

不能。 Rust是静态类型的。