生锈枚举中的原始类型

时间:2014-01-19 09:11:44

标签: rust

在Rust中,似乎可以定义一个带有基本类型的枚举作为表示:

enum A {
    f64,
    i32
}

我如何使用这样的枚举?例如,我如何创建实例以及如何使用match语句来处理不同的基元类型?

2 个答案:

答案 0 :(得分:11)

(这个答案是从0.9开始)

这并不是你认为它正在做的事情。它创建了一个枚举A,其变体名为 f64i32,而不是使用这些类型。由于类型和其他所有内容(变量等)共享不同的命名空间,您可能不会注意到。使用原始枚举的示例:

enum A {
    f64,
    i32
}

fn main() {
   let x: A = f64;
   let y: A = i32;

   match x {
       f64 => println!("got f64"),
       i32 => println!("got i32")
   }
}

要实际包装这些类型的,您需要使用“类似元组的变体”:

enum A {
    Float(f64),
    Int(i32)
}

fn main() {
    let x: A = Float(42.0);
    let y: A = Int(7);

    match x {
        Float(value) => println!("got Float({})", value),
        Int(value) => println!("got Int({})", value)
    }
}

答案 1 :(得分:3)

你没有按照预期行事,检查输出:

enum A {
    f64,
    i32
}

fn main() {
    let x:A = f64;
    let y:A = i32;
    println!("{}, {}", x as int, y as int);
}

f64i32只是枚举的变体,就像常量的任何其他名称一样。这样,它的工作方式更像是C enums而不是C联合。