如何重新执行Rust主功能?

时间:2018-12-15 22:06:49

标签: function syntax rust

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

该程序最初运行时,它将try用于文件。如果该文件不存在,它将执行一个login模块并创建该文件;如果确实存在,它将直接进入主application模块。

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:3)

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();
    }
}
Not done yet
Not done yet
Not done yet
Ending

现在,我建议您不要这样做。基本上只是古怪。而是使用循环。我什至看不到需要循环的地方,只需要基本的条件逻辑即可:

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")
}