是否可以在Rust中使用匹配来初始化不可变变量?

时间:2018-01-24 04:47:08

标签: variables rust immutability mutability

我有这段代码,我尝试将命令行参数转换为整数。问题是,变量width和height应该是不可变的,因为我不打算改变它们。有没有什么方法可以使用像let width = {match....}这样的匹配,并在一步中将它们初始化为不可变变量,而不是给它们一个默认值并改变它们?我相信这会更安全,更有效率。

let args: Vec<String> = env::args().collect();
let width_arg = &args[1];
let height_arg = &args[2];

let mut width = 0;
let mut height = 0;

match width_arg.parse::<i32>() {
    Ok(w) => width = w,
    Err(_) => ask_for_number(),
}

match height_arg.parse::<i32>() {
    Ok(h) => height = h,
    Err(_) => ask_for_number(),
}

2 个答案:

答案 0 :(得分:8)

当然,匹配是一个表达式,所以你应该能够按如下方式重写:

let args: Vec<String> = env::args().collect();
let width_arg = &args[1];
let height_arg = &args[2];

let width = match width_arg.parse::<i32>() {
    Ok(w) => w,
    Err(_) => ask_for_number(),
};

let height = match height_arg.parse::<i32>() {
    Ok(h) => h,
    Err(_) => ask_for_number(),
};

答案 1 :(得分:2)

是的,只需像这样初始化变量:let a = match b { /* your code here*/ };