繁体   English   中英

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

[英]Is it possible to initialize immutable variables with match in Rust?

我有这段代码,我尝试将命令行参数转换为整数。 问题是,变量宽度和高度实际上应该是不可变的,因为我不打算更改它们。 有什么方法可以使用let width = {match....}这样的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(),
}

当然,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(),
};

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM