Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0434: can't capture dynamic environment in a fn item
What it meansA variable used inside an inner function comes from a dynamic environment.
What rustc prints
error[E0434]: can't capture dynamic environment in a fn item --> main.rs:4:9 | 4 | y // error: can't capture dynamic environment in a fn item; use the | ^ | = help: use the `|| { ... }` closure form instead
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
A variable used inside an inner function comes from a dynamic 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.
}
}
Inner functions do not have access to their containing environment. 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
}
}From rustc --explain E0434 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?