我正在Rust中编写bash
克隆。当用户键入exit
时,我需要退出程序。在我的程序的前几次迭代中,在添加更复杂的功能之前,我使用return
退出提示用户输入的循环。这个逻辑现在处于一个函数中,因为我实现内置shell函数的方式,所以当我return
它只是跳出函数回到控制循环,而不是短路控制循环和结束该计划。
我意识到当用户输入exit
并退出循环时我可能会返回一个布尔值,但我想至少知道Rust是否有办法提前终止程序,类似于Java {{1这对某些类型的程序很有用。
答案 0 :(得分:39)
std::process::exit()
正是如此 - 它使用指定的退出代码终止程序:
use std::process;
fn main() {
for i in 0..10 {
if i == 5 {
process::exit(1);
}
println!("{}", i);
}
}
此函数使程序立即终止,无需展开和运行析构函数,因此应谨慎使用。
您可以直接使用C API。将libc = "0.2"
添加到Cargo.toml
,然后:
fn main() {
for i in 0..10 {
if i == 5 {
unsafe { libc::exit(1); }
}
println!("{}", i);
}
}
Rust编译器无法验证调用C函数,因此需要unsafe
块。程序使用的资源将无法正确释放。这可能会导致悬挂插座等问题。
据我所知,退出程序的正确方法是以某种方式终止所有线程,然后进程将自动退出。
答案 1 :(得分:-1)
panic!("Oh no something bad has happened!")
示例:
if a * g < 0f32 { panic!("The arithmetric-geometric mean is undefined for numbers less than zero!"); }
在较旧的文档中,您会看到此失败!(“哦,这里没有发生任何不好的事情。”)
出于某种原因,这个宏从失败变为恐慌。如果必须的话,恐慌是失败的方法。
[编辑]对不起。看起来你应该测试字符串“exit”的输入,这取决于你如何输入(按行或通过args)。然后,您可以在检测到退出的情况下让程序脱离循环。
示例:
loop {
if exit_found { break }
else {
// your thing, which also looks for exit_found
}
}