2014-01-19 26 views
5

表現としてプリミティブ型と列挙型を定義することが可能であると思われますか?たとえば、インスタンスを作成するにはどうすればよいでしょうか、また、異なるプリミティブ型を処理するためにmatch文を使用するにはどうすればよいでしょうか?あなたが期待するものプリミティブ型は錆で

答えて

10

(この答えは0.9のようです)あなたはそれをやっていると思うものをかなりやっていません

。それはという名前の列挙型Af64i32という名前のこれらのタイプを使用していません。型やその他のもの(変数など)は異なる名前空間を共有するため、気付かないかもしれません。オリジナルの列挙型の使用例:

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) 
    } 
} 
:実際 値これらのタイプのをラップするために

enum A { 
    f64, 
    i32 
} 

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

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

を、あなたは「タプルのような変種」を使用する必要があります

3

やっていない、この出力のチェック:ただ単に定数の他の名前と同様に、列挙型の変異体として

enum A { 
    f64, 
    i32 
} 

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

f64i32を。このようにして、CのenumよりもCのunionほど動作します。

関連する問題