在Rust中,创建或分配多个对象中的一个到变量的首选方式是什么?由于作用域的原因,似乎必须在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
被赋值两次,并且如果condition
为真,则"second".to_string()
被运行但是浪费了。如果这些操作是昂贵的操作(可能带有副作用),则此方法不适合。
是否存在更好的替代方案?
if
和match
是表达式这个事实真的大大减少了需要可变变量的情况,要全心接受它 :) - Matthieu M.let (a, b) = if condition { ("first", 1) } else { ("second", 2) };
- Benjamin Lindley