【发布时间】:2016-09-11 18:03:18
【问题描述】:
Rust 包含loop,它是专门为无限循环设计的:
使用关键字
loop、Rust提供了一种无限循环的方法,直到 到达某个终止语句(如程序退出)
当我希望我的循环永远运行时,我想不出一个单一的场景。是否存在无限循环有用的场景?
【问题讨论】:
-
为什么要投反对票?我相信这是一个合理的问题,答案帮助我理解了这个概念。
标签: rust infinite-loop
Rust 包含loop,它是专门为无限循环设计的:
使用关键字
loop、Rust提供了一种无限循环的方法,直到 到达某个终止语句(如程序退出)
当我希望我的循环永远运行时,我想不出一个单一的场景。是否存在无限循环有用的场景?
【问题讨论】:
标签: rust infinite-loop
loop 通常用于我们想要在循环体中间中断的循环。也就是说,你想在测试任何条件之前做一些事情,然后如果满足某个条件就退出循环,然后做一些必须在测试条件后才能做的事情,然后重复。在其他语言中,这通常呈现为while (true) 或for (;;)。这种情况很常见,Rust 决定通过保留一个关键字来声明没有入口条件的循环来接受这种模式。
此外,Rust 没有 C 的 do..while 循环,它在迭代结束时测试条件,但不是在第一次迭代之前。在 Rust 中,您可以在循环结束时使用 loop 和 if condition { break } 语句来模拟它。 do..while 循环在实践中比较少见,根据我的经验,比“中间中断”循环还要少。
【讨论】:
我经常在我期望用户持续输入的程序中使用loop,例如在命令行游戏中:
fn play() {
let mut game = Game::new();
loop { game.turn() }
}
由于可能的输入错误,它也很有用 - 在每个回合中,它们可以打印给玩家,并且游戏可以继续,只要玩家想要,直到胜利、失败或辞职breaks 循环。
【讨论】:
while let Some(xx) = user.input() { game.turn(); },因为我希望在某些时候用户会想要退出......
Results 处理输入(并且不想在Error 上退出),还有一段额外的代码可以在每回合开始时评估游戏状态,并允许在输入后立即退出.
嵌入式程序中的主循环。嵌入式设备通常希望只要它们打开就可以运行。两段主要代码通常是事件处理程序和主循环。如果有主循环,它将永远运行。
主循环可能有一个"wait for interrupt",或者它可能只是不断地将其 CPU 资源用于找出实现其目标的更好方法。
【讨论】: