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
}
}