2016-06-25 13 views
1

複数の列挙型を同じ値にする最良の方法は何ですか?これは、私が望むものの一例ですが、Rustはそれが好きではないことを除いては。同じ値を持つ複数の列挙型?

pub enum Nums { 
    Num1   = 0, 
    Num2   = 1, 
    Num3   = 2, 
    Num4   = 3, 
    Num5   = 4, 

    FirstNum  = 0, 
    MiddleNum  = 2, 
    LastNum   = 4, 
} 

答えて

7

定数を使用する必要があります。 enumバリアントは、が他のバリアントと同じタグ値を持つことができません。あなたが毎晩コンパイラを使用してもかまわない場合

pub enum Nums { 
    Num1   = 0, 
    Num2   = 1, 
    Num3   = 2, 
    Num4   = 3, 
    Num5   = 4, 
} 

pub const FirstNum: Nums = Nums::Num1; 
pub const MiddleNum: Nums = Nums::Num3; 
pub const LastNum: Nums = Nums::Num5; 

は、rootモジュールに #![feature(associated_consts)]を追加すると、関連する定数を使用することができます。 これはあなたがまたenumにメソッドを追加することができNums::FirstNumなど

impl Nums { 
    pub const FirstNum: Nums = Nums::Num1; 
    pub const MiddleNum: Nums = Nums::Num3; 
    pub const LastNum: Nums = Nums::Num5; 
} 
+0

ああ、それらは私がしたい正確に何です。そんなことはできないと思った。私はenumを持つことを考えていたし、すべてのenum値と定数をmodブロックの中に入れたとして複写を再定義しました。 – graeme

0

を使用することができます:定数を関連する

pub enum Nums { 
    Num1 = 0, 
    Num2 = 1, 
    Num3 = 2, 
    Num4 = 3, 
    Num5 = 4, 
} 

impl Nums { 
    pub fn first() -> Self { Nums::Num1 } 
    pub fn middle() -> Self { Nums::Num3 } 
    pub fn last() -> Self { Nums::Num5 } 
} 

fn main() { 
    println!("{}", Nums::first() as u8); 
} 
関連する問題