在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
为真,则被浪费了。如果不是简单的字符串创建,而是昂贵的操作(可能会有副作用),则此方法不适合。
还有更好的选择吗?
答案 0 :(得分:9)
在Rust中,if / else块是一个表达式。也就是说,块本身具有一个值,该值等于执行了任何部分的最后一个表达式。考虑到这一点,我将像这样构造您的代码:
let s = if condition {
"first"
} else {
"second"
}.to_string();