如何声明变量但不赋值?

zha*_*ozk 2 initialization rust

我想声明acceptable_set并使用它。但分配给它的是一个空向量。所以编译器会发出警告。如何声明一个变量而不给它赋值?

let mut acceptable_set: Vec<String> = Vec::new();
if opt.acceptable_set.is_none() {
    acceptable_set = crate::builtin_words::ACCEPTABLE
        .to_vec()
        .iter_mut()
        .map(|x| x.to_string())
        .collect();
} else {
    acceptable_set = get_acceptable_set(opt)
}
Run Code Online (Sandbox Code Playgroud)
warning: value assigned to `acceptable_set` is never read
  --> src/basic_function.rs:27:13
   |
27 |     let mut acceptable_set: Vec<String> = Vec::new();
   |             ^^^^^^^^^^^^^^
   |
   = note: `#[warn(unused_assignments)]` on by default
   = help: maybe it is overwritten before being read?
Run Code Online (Sandbox Code Playgroud)

pro*_*-fh 7

而不是像这样声明一个未初始化的变量

let var;
if condition {
  var = value1;
} else {
  var = value2;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用替代方案直接初始化变量。

let var = if condition { value1 } else { value2 };
Run Code Online (Sandbox Code Playgroud)

你的变量甚至不需要mut关键字(除非你想在之后改变它)。

由于在您的问题示例中,您似乎是针对Option( .is_none()) 进行测试,因此您可以使用此形式。

fn main() {
    let value1 = 12;
    let value2 = 34;
    let opt = Some(987);
    let var = if let Some(opt_value) = opt {
        value1 + opt_value // use the data in the option
    } else {
        value2 // the option contains nothing, use a default value
    };
    println!("var {:?}", var);
}
Run Code Online (Sandbox Code Playgroud)

另请参见map_or_else()