This error indicates that a variable usage inside an inner function is invalid because the variable comes from a dynamic environment. Inner functions do not have access to their containing environment.

Erroneous code example:

fn foo() {
    let y = 5;
    fn bar() -> u32 {
        y // error: can't capture dynamic environment in a fn item; use the
          //        || { ... } closure form instead.
    }
}

Functions do not capture local variables. To fix this error, you can replace the function with a closure:

fn foo() {
    let y = 5;
    let bar = || {
        y
    };
}

or replace the captured variable with a constant or a static item:

fn foo() {
    static mut X: u32 = 4;
    const Y: u32 = 5;
    fn bar() -> u32 {
        unsafe {
            X = 3;
        }
        Y
    }
}