如果变量data_type
中存储了某种数据的数据类型,该如何用该变量中定义的数据类型创建一个新变量?
例如:
struct a {
var: String,
}
struct b {
var: String,
}
let var_type = "a";
let variable: var_type { var: "abc" }; // creates struct var_type
答案 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是静态类型的。