用布尔值检查Rust枚举的类型?

时间:2013-06-09 22:36:03

标签: enums match rust

我希望用户将命令行参数传递给我在Rust中编写的简单函数。我知道我可以使用int::from_str(args[1])进行转换,但这会返回一个Option<int>,这意味着为了将它传递给一个带int的函数,如下所示,我有使用match语句。但是使用 n 参数,有2 ^ n 的可能性。用一些东西写一系列嵌套的match语句会很糟糕。如果有办法做某事,那将是理想的:

// will return either Some(int) or None
let start = int::from_str(args[1]), end = int::from_str(args[2]);
if typeof(start) == Some && typeof(end) == Some { 
    println(fmt!("You entered: %d, %d", start, end); 
} else { 
    println("Error with arguments."); 
}

有没有这样的方法?这让我可以测试枚举中哪个成员除了match之外还有什么?

1 个答案:

答案 0 :(得分:6)

枚举的变体都是相同的类型(在这种情况下,NoneSome(foo)都是Option<int>),所以你真正想做的是检查哪个变种{ {1}}和start是。幸运的是Rust提供了几种选择。

直接翻译您的代码就是使用end。但是,这需要将格式字符串修改为start.is_some() && end.is_some(),因为fmt!("You entered: %d, %d", start.get(), end.get())start不是整数,但仍包含在end变体中。 (此变体测试必须以每个枚举为基础编写,没有内置函数允许您对任何枚举执行测试。)

更惯用的方式是这样的:

Some(...)