Rust中如何声明变量但不赋值?消除未读取赋值警告
解决Rust中变量初始赋值未被读取的警告问题
你的问题核心是初始赋值的Vec::new()从未被使用就被覆盖,导致编译器警告。以下是几种正确的处理方式:
方案1:用条件表达式直接初始化(推荐)
如果后续不需要修改acceptable_set,可以去掉mut,直接通过if表达式的结果初始化变量,完全避免无用的初始赋值:
let acceptable_set: Vec<String> = if opt.acceptable_set.is_none() { crate::builtin_words::ACCEPTABLE .to_vec() .iter_mut() .map(|x| x.to_string()) .collect() } else { get_acceptable_set(opt) };
如果后续需要修改这个向量,保留mut即可:
let mut acceptable_set: Vec<String> = if opt.acceptable_set.is_none() { crate::builtin_words::ACCEPTABLE .to_vec() .iter_mut() .map(|x| x.to_string()) .collect() } else { get_acceptable_set(opt) }; // 后续可对acceptable_set进行修改操作
方案2:先声明变量,再在分支中赋值
Rust允许先声明未初始化的变量,只要能确保所有代码路径都对其赋值,编译器就不会报错,同时也能消除初始赋值的警告:
let mut acceptable_set: Vec<String>; 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); }
为什么原代码会触发警告
你最初的代码中,Vec::new()创建的空向量在赋值后立刻被分支中的新值覆盖,这个初始值从未被读取,Rust的unused_assignments警告会标记这种冗余操作,提示你移除无用的初始赋值。
内容的提问来源于stack exchange,提问作者zhaozk
相关产品推荐
相关产品推荐

