如何重新执行 Rust main 函数?

-1 syntax function rust

我希望尝试从应用程序本身内部重新运行我的应用程序。

当程序最初运行时,它将try查找一个文件。如果文件不存在,则执行login模块并创建文件;如果存在,将直接进入主application模块。

try函数位于初始fn main ()函数内部。

如何重新执行应用程序的main函数来重新评估文件是否存在?

(有类似的东西self::main()存在吗?)

谢谢!!

She*_*ter 5

main只是一个函数。像任何其他函数一样调用它:

use std::sync::atomic::{AtomicUsize, Ordering};

static NUMBER_OF_RUNS: AtomicUsize = AtomicUsize::new(3);

fn main() {
    if 0 == NUMBER_OF_RUNS.fetch_sub(1, Ordering::SeqCst) {
        eprintln!("Ending");
    } else {
        eprintln!("Not done yet");
        main();
    }
}
Run Code Online (Sandbox Code Playgroud)
use std::sync::atomic::{AtomicUsize, Ordering};

static NUMBER_OF_RUNS: AtomicUsize = AtomicUsize::new(3);

fn main() {
    if 0 == NUMBER_OF_RUNS.fetch_sub(1, Ordering::SeqCst) {
        eprintln!("Ending");
    } else {
        eprintln!("Not done yet");
        main();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我建议你不要这样做。基本上就是很奇怪。相反,使用循环。我什至不知道你在哪里需要循环,你所需要的只是基本的条件逻辑:

use std::{fs::File, io};

fn main() {
    let file = File::open("my_file")
        .or_else(|_| login())
        .expect("Unable to open file");

    println!("main logic");
}

fn login() -> io::Result<File> {
    File::create("my_file")
}
Run Code Online (Sandbox Code Playgroud)