2014-01-19 82 views
5

生鏽現在看來,這可能與原始類型定義枚舉的表示:基本類型生鏽枚舉

enum A { 
    f64, 
    i32 
} 

我怎麼可以用這樣一個枚舉?例如,我將如何創建一個實例,以及如何使用匹配語句處理不同的基元類型?

回答

10

(這個答案是0.9)

這不是做你完全認爲它在做什麼。它創建一個enum 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) 
    } 
} 
3

你沒有做你所期望的,檢查這個輸出:

enum A { 
    f64, 
    i32 
} 

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

f64i32剛剛枚舉的變種,就像任何其他名稱的常量。這樣,它的工作更像C枚舉而不是C工會。