基于编译时条件赋值PathBuf变量却得到单元类型()的问题
问题原因及解决
你的代码里processed_files_location被推断为单元类型(),核心原因是if分支的末尾加了分号。
在Rust中,表达式的返回值是最后一行的结果,但如果给表达式加上尾部分号,它就会被转为语句,语句的返回值固定是()。你的if和else分支最后一行都加了分号,导致整个if表达式的返回值变成(),最终变量类型被推断为()。
修正后的代码如下:
// USE_OLD_DATA set at compilation time to FALSE or TRUE let root = env::current_dir().unwrap(); let processed_files_location = if USE_OLD_DATA { root.join("Result Data 10-28-2020") } else { root.join("Result Data") };
去掉分支末尾的分号后,root.join()返回的PathBuf就会作为if表达式的结果,赋值给processed_files_location,变量类型也会被正确推断为PathBuf。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

