我希望用户将命令行参数传递给我在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
之外还有什么?
答案 0 :(得分:6)
枚举的变体都是相同的类型(在这种情况下,None
和Some(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(...)