rust - 在 Rust 中从 if else 条件赋值的惯用方式

标签 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() 运行但如果条件 为真。如果不是简单的字符串创建,而是这些是昂贵的操作(可能有副作用),则此方法不适合。

有更好的选择吗?

最佳答案

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

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

关于rust - 在 Rust 中从 if else 条件赋值的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981783/

相关文章:

binding - let-rebinding 和标准赋值有什么区别?

rust - 静态需求从何而来?

rust - 为什么 Futures 在 Rust 中使用引脚?

functional-programming - 在 map 内部使用 if 时如何处理 "if may be missing an else clause"?

rust - Rust 中 libc::stat 中的文件参数

rust - "struct field is never used",但 RAII 需要

Rust 在询问用户输入时出现 ParseIntError 错误?

iterator - 在迭代另一个属性时修改结构的一个属性

rust - 变异和非变异方法链

rust - Rust 中的文字字符串和 Args 有什么区别?