是否可以在 Rust 中使用 match 初始化不可变变量?
Is it possible to initialize immutable variables with match in Rust?
我在这段代码中尝试将命令行参数转换为整数。问题是,变量 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(),
}
是的,像这样初始化变量:let a = match b { /* your code here*/ };
当然,match 是一个表达式,所以你应该可以重写它如下:
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(),
};
我在这段代码中尝试将命令行参数转换为整数。问题是,变量 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(),
}
是的,像这样初始化变量:let a = match b { /* your code here*/ };
当然,match 是一个表达式,所以你应该可以重写它如下:
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(),
};