Rust 为什么在一个匹配中使用了可能未初始化的值,但在另一个使用“panic”的匹配中却没有使用该值?
我不明白如果我取消注释第22行,为什么会失败:Rust 为什么在一个匹配中使用了可能未初始化的值,但在另一个使用“panic”的匹配中却没有使用该值?,rust,Rust,我不明白如果我取消注释第22行,为什么会失败: 错误[E0381]:借用可能未初始化的变量:`modified` -->src/main.rs:25:32 | 25 | println!(“已修改:{:?}”,已修改);//->这行不通 |^^^^^^^^^^使用可能未初始化的`modified` 第18行的相同代码正常工作。我忽略了什么 在有问题的行中,Rust无法确定modified是否已实际初始化 如果无法设置modified,则另一种选择是提前返回: const FILE_NAME:
错误[E0381]:借用可能未初始化的变量:`modified`
-->src/main.rs:25:32
|
25 | println!(“已修改:{:?}”,已修改);//->这行不通
|^^^^^^^^^^使用可能未初始化的`modified`
第18行的相同代码正常工作。我忽略了什么 在有问题的行中,Rust无法确定
modified
是否已实际初始化
如果无法设置modified
,则另一种选择是提前返回:
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);
}
在有问题的行中,Rust无法确定
modified
是否已实际初始化
如果无法设置modified
,则另一种选择是提前返回:
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);
}
因为在一种情况下,你初始化了这个值,而在另一种情况下,你看不出这是如何更清楚的,这是否回答了你的问题?“但同样的18行行行得通。我忽略了什么?”啊,但你用了
恐慌!(“还不够!”
编译器非常聪明,可以在匹配后断定元数据
是init,因为否则您将陷入恐慌。在你的第二部分中,你不必惊慌失措,这样修改后的就不会在比赛结束后初始化了谢谢,我现在明白了其中的魔力。你能把它作为一个答案,所以我把它标记为接受吗?因为在一种情况下,你初始化了这个值,在另一种情况下,你看不出这怎么会更清楚,这回答了你的问题吗?“但同样的18行行行得通。我忽略了什么?”啊,但你用了恐慌!(“还不够!”
编译器非常聪明,可以在匹配后断定元数据
是init,因为否则您将陷入恐慌。在你的第二部分中,你不必惊慌失措,这样修改后的就不会在比赛结束后初始化了谢谢,我现在明白了其中的魔力。你能加上这个作为答案,所以我把它标记为接受吗?