我正在尝试尝试从应用程序本身内部重新运行我的应用程序。
该程序最初运行时,它将try
用于文件。如果该文件不存在,它将执行一个login
模块并创建该文件;如果确实存在,它将直接进入主application
模块。
此try
函数位于初始fn main ()
函数的内部。
我将如何重新执行应用程序的main
函数以重新评估文件是否存在?
(是否存在类似self::main()
的东西?)
谢谢!
答案 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")
}