Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 为什么在一个匹配中使用了可能未初始化的值,但在另一个使用“panic”的匹配中却没有使用该值?_Rust - Fatal编程技术网

Rust 为什么在一个匹配中使用了可能未初始化的值,但在另一个使用“panic”的匹配中却没有使用该值?

Rust 为什么在一个匹配中使用了可能未初始化的值,但在另一个使用“panic”的匹配中却没有使用该值?,rust,Rust,我不明白如果我取消注释第22行,为什么会失败: 错误[E0381]:借用可能未初始化的变量:`modified` -->src/main.rs:25:32 | 25 | println!(“已修改:{:?}”,已修改);//->这行不通 |^^^^^^^^^^使用可能未初始化的`modified` 第18行的相同代码正常工作。我忽略了什么 在有问题的行中,Rust无法确定modified是否已实际初始化 如果无法设置modified,则另一种选择是提前返回: const FILE_NAME:

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

错误[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,因为否则您将陷入恐慌。在你的第二部分中,你不必惊慌失措,这样
修改后的
就不会在比赛结束后初始化了谢谢,我现在明白了其中的魔力。你能加上这个作为答案,所以我把它标记为接受吗?