如何使用 Rust 将匹配的值分配为结果?

4
我在Rust中稍微使用了一下"match",现在我正在寻找一个解决方案,因为我相信一定有解决方案。在以下示例中,在生成的随机数不为零的情况下,我希望将生成的随机数赋值给变量i_bal。换句话说,我想要根据被测试的实际随机数进行赋值,而不是像我示例中那样分配"23456"。我知道可能有更好的解决方法,但是我想用这种方法来解决问题。
示例:
let i_bal: i64 = match std::rand::task_rng().gen() {
    0 => 1234,
    _  => 23456
};
1个回答

8

你可以使用变量模式代替通配符模式。它们都可以匹配所有内容,但是使用变量模式时,匹配的值将绑定到名称上:

let i_bal: i64 = match std::rand::task_rng().gen() {
    0 => 1234,
    x => x
};

在某些情况下,使用通配符模式的原因是为了明确表达您不需要该值,并且以避免在作用域中添加不必要的变量名称。
例如,如果您有一个元组(high, low, open, close),并且只想从中获取变量high和low,则可以执行以下操作:
let (high, low, _, _) = tickerData

好的,谢谢。重新阅读文档后,我发现确实是这样写的。我认为一个更直接的例子会更清晰明了。我会采纳你的答案。文档中说(部分内容):“模式中的变量名称匹配任何值”。对于不熟悉的人(比如我),如果不知道使用名称可以创建变量(我猜测),这就没有意义了。我以为它指的是与match语句外部的变量有关。这并不影响我对match语句本身的看法——非常强大(而且没有break!)。似乎使用变量名就像“_”一样。 - Brian Oh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接