从Rust中的if else条件分配值的惯用方式

时间:2018-12-30 22:01:41

标签: rust

在Rust中“ if-else”构造内的变量中创建或分配多个对象之一的首选方法是什么?由于作用域,似乎必须在if-else之外创建变量。我想到的两种方法都不是很好。以字符串为例,这是一种方法,但是会生成有关未使用分配的警告:

let mut s = String::new();
if condition {
    s = "first".to_string();
} else {
    s = "second".to_string();
}

另一个替代方法是:

let mut s = "second".to_string();
if condition {
    s = "first".to_string();
}

它更短并且不会生成警告,但是意味着s被分配了两次,并且意味着"second".to_string()运行,但是如果condition为真,则被浪费了。如果不是简单的字符串创建,而是昂贵的操作(可能会有副作用),则此方法不适合。

还有更好的选择吗?

1 个答案:

答案 0 :(得分:9)

在Rust中,if / else块是一个表达式。也就是说,块本身具有一个值,该值等于执行了任何部分的最后一个表达式。考虑到这一点,我将像这样构造您的代码:

let s = if condition {
    "first"
} else {
    "second"
}.to_string();