Error code E0387
Note: this error code is no longer emitted by the compiler.
This error occurs when an attempt is made to mutate or mutably reference data that a closure has captured immutably.
Erroneous code example:
ⓘ
The problem here is that foo is defined as accepting a parameter of type Fn
.
Closures passed into foo will thus be inferred to be of type Fn
, meaning that
they capture their context immutably.
If the definition of foo
is under your control, the simplest solution is to
capture the data mutably. This can be done by defining foo
to take FnMut
rather than Fn:
Alternatively, we can consider using the Cell
and RefCell
types to achieve
interior mutability through a shared reference. Our example's mutable
function could be redefined as below:
You can read more in the API documentation for Cell.