This repository has been archived on 2025-08-04. You can view files and clone it, but cannot push or open issues or pull requests.
rhaj/rhai_engine/rhaibook/language/loop.md
2025-04-03 09:18:05 +02:00

1.5 KiB

Infinite Loop

{{#include ../links.md}}

Infinite loops follow Rust syntax.

Like Rust, continue can be used to skip to the next iteration, by-passing all following statements; break can be used to break out of the loop unconditionally.


`loop` can be disabled via [`Engine::set_allow_looping`][options].
let x = 10;

loop {
    x -= 1;

    if x > 5 { continue; }  // skip to the next iteration

    print(x);

    if x == 0 { break; }    // break out of loop
}

A `loop` statement without a `break` statement inside its loop block is infinite.
There is no way for the loop to stop iterating.

Loop Expression

Like Rust, loop statements can also be used as expressions.

The break statement takes an optional expression that provides the return value.

The default return value of a loop expression is [()].


Loop expressions can be disabled via [`Engine::set_allow_loop_expressions`][options].
let x = 0;

// 'loop' can be used just like an expression
let result = loop {
    if is_magic_number(x) {
        // if the loop breaks here, return a specific value
        break get_magic_result(x);
    }

    x += 1;

    // ... if the loop exits here, the return value is ()
};

if result == () {
    print("Magic number not found!");
} else {
    print(`Magic result = ${result}!`);
}