Как повторно выполнить основную функцию Rust? - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь перезапустить приложение изнутри самого приложения.

При первоначальном запуске программы для файла будет try.Если файл не существует, он выполняет модуль login и создает файл;если он существует, он перейдет прямо к основному модулю application.

Эта try функция находится внутри начальной функции fn main ().

Как бы я повторно выполнил функцию main приложения, чтобы переоценить, существует ли файл?

(существует что-то вроде self::main() существует?)

Спасибо !!

1 Ответ

0 голосов
/ 16 декабря 2018

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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...