gpt4 book ai didi

rust - 为什么在一个匹配项中使用未初始化的值时不会出现错误,而在使用 `panic`的另一个匹配项中却未出现错误?

转载 作者:行者123 更新时间:2023-12-03 11:43:37 24 4
gpt4 key购买 nike

const FILE_NAME: &str = "/tmp/main.rs";

fn main() {
println!("Hello, world!");
let metadata;
match std::fs::metadata(FILE_NAME) {
Ok(meta_data) => {
metadata = meta_data;
println!("metadata: {:?}", metadata);
}
_ => {
panic!("not meta enough!");
}
}

let modified: std::time::SystemTime;
match metadata.modified() {
Ok(x) => {
modified = x;
println!("modified: {:?}", modified); // this works
}
_ => (),
}

// println!("modified: {:?}", modified); //-> this does not work
let len = metadata.len();
println!("metadata: {:?}", metadata);
println!("len: {}", len);
}

我不明白如果取消注释第22行,为什么它失败了:

error[E0381]: borrow of possibly-uninitialized variable: `modified`
--> src/main.rs:25:32
|
25 | println!("modified: {:?}", modified); //-> this does not work
| ^^^^^^^^ use of possibly-uninitialized `modified`

第18行的相同代码可以正常工作。我在俯视什么?

最佳答案

在有问题的行中,Rust无法确定modified是否已实际初始化。

如果无法设置modified,则可以选择提前返回:

fn main() {
println!("Hello, world!");
let metadata;
match std::fs::metadata("dsf") {
Ok(meta_data) => {
metadata = meta_data;
println!("metadata: {:?}", metadata);
}
_ => {
panic!("not meta enough!");
}
}

let modified: std::time::SystemTime = match metadata.modified() {
Ok(x) => {
println!("modified is set to {:?}", x); // this works
x
}
_ => return, // early return on error
};

println!("modified: {:?}", modified);
let len = metadata.len();
println!("metadata: {:?}", metadata);
println!("len: {}", len);
}

关于rust - 为什么在一个匹配项中使用未初始化的值时不会出现错误,而在使用 `panic`的另一个匹配项中却未出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com