Rust 有没有更简洁的方法来使用枚举,特别是当它只有基元类型时?

Rust 有没有更简洁的方法来使用枚举,特别是当它只有基元类型时?,rust,Rust,我正在使用一个枚举来表示Rust中的多态性。我需要一个可以包含整数或浮点值的向量: enum Value { Float(f32), Int(i32), } let vec = Vec::<Value>::new(); vec.push(Value::Int(0)); vec.push(Value::Float(1.0)); 有没有更简洁的方法来做到这一点,特别是当您只使用基元类型时?没有 有一些技巧可以减少代码量: 不需要指定向量的类型。 可以一次构造所有向量。

我正在使用一个枚举来表示Rust中的多态性。我需要一个可以包含整数或浮点值的向量:

enum Value {
    Float(f32),
    Int(i32),
}

let vec = Vec::<Value>::new();
vec.push(Value::Int(0));
vec.push(Value::Float(1.0));
有没有更简洁的方法来做到这一点,特别是当您只使用基元类型时?

没有

有一些技巧可以减少代码量:

不需要指定向量的类型。 可以一次构造所有向量。 您可以导入枚举变量。 感觉很奇怪,我只是有效地重命名了基本类型

那只是你程序的一个产物。例如,您的枚举与此枚举之间的计算机没有真正的区别:

enum MagicSpell {
    Multiplier(f32),
    NumberOfStomachs(i32),
}

但是,这些名称的语义也有很大不同。

您希望它更简洁吗?从原语到值的隐式转换?顺便说一下,这里不需要指定向量的元素类型;编译器可以推断出来。是的,我想这并不比C并集更糟糕。我觉得很奇怪,我只是有效地重命名了基本类型。是的,在我的实际项目中,我没有使用Float和Int,因为我存储的值有额外的语义含义,我可以在名称中编码,所以感觉不那么浪费。
enum MagicSpell {
    Multiplier(f32),
    NumberOfStomachs(i32),
}