2015-03-25 31 views
1

我有一些嵌套值的枚舉。我想檢查這個枚舉是否是給定的變體,但沒有指定裏面的內容。請檢查下面的程序:比較枚舉變體,但沒有指定裏面的東西

enum Test { 
    Zero, 
    One(u8), 
    Two(u16), 
    Four(u32), 
} 

fn check(x: Test, y: Test) -> bool { 
    x == y; 
} 

fn main() { 
    let x = Test::Two(10); 
    let b1 = check(x, Test::One); 
    let b2 = check(x, Test::Two); 
    let b3 = match x { 
     Test::Four(_) => true, 
     _ => false, 
    } 
} 

b3將檢查xTest::Four裏面任意值。我想要在功能check中完成檢查。目前的代碼不能編譯,我不知道如何只提取枚舉變量沒有相應的內部值。

我想這可以用宏轉換到match表達式,但是有沒有可能這樣做沒有宏?

我可以看到Test::Onefn(u16) -> Test {Two}。我可以使用這個事實嗎?測試x是使用該函數創建的。

回答

3

這不支持(還)。有活動RFC 639它建議實現一個函數返回一個整數對應於枚舉判別式。有了這個假設的功能,您可以預計以下工作:

assert_eq!(Test::Two(10).discriminant(), Test::Two(42).discriminant());