我希望尝试从应用程序本身内部重新运行我的应用程序。
当程序最初运行时,它将try查找一个文件。如果文件不存在,则执行login模块并创建文件;如果存在,将直接进入主application模块。
该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();
}
}
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)