Function 如何重新执行主功能?

Function 如何重新执行主功能?,function,syntax,rust,Function,Syntax,Rust,我希望尝试从应用程序本身内部重新运行我的应用程序 当程序最初运行时,它将尝试文件。如果文件不存在,则执行登录模块并创建文件;如果它确实存在,它将直接进入主应用程序模块 此try函数位于初始fn main()函数的内部 如何重新执行应用程序的main函数来重新评估文件是否存在 (是否存在类似于self::main()的东西?) 谢谢 main只是一个函数。像调用任何其他函数一样调用它: use std::sync::atomic::{AtomicUsize, Ordering}; static

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

当程序最初运行时,它将
尝试
文件。如果文件不存在,则执行
登录
模块并创建文件;如果它确实存在,它将直接进入主
应用程序
模块

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

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

(是否存在类似于
self::main()
的东西?)


谢谢

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();
    }
}
尚未完成
还没做完
还没做完
结尾

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

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")
}
使用std:{fs::File,io};
fn main(){
让文件=文件::打开(“我的文件”)
。或| | | login())
.expect(“无法打开文件”);
println!(“主逻辑”);
}
fn login()->io::Result{
文件::创建(“我的文件”)
}

为什么不创建一个单独的函数,然后运行两次呢?在我看来,两次运行
main
似乎很糟糕。