The scoping rules for nested and anonymous functions require that all variables used within the function be present in the text of the code.
If you attempt to dynamically add a variable to the workspace of an anonymous function, a nested function, or a function that contains a nested function, then MATLAB® issues an error of the form
Attempt to add variable to a static workspace.
This table describes typical operations that attempt dynamic assignment, and the recommended ways to avoid it.
Type of Operation | Best Practice to Avoid Dynamic Assignment |
---|---|
| Specify the variable name as an input to the |
| If possible, avoid using these functions altogether. See Alternatives to the eval Function. |
Calling a MATLAB script that creates a variable | Convert the script to a function and pass the variable using arguments. This approach also clarifies the code. |
Assigning to a variable in the MATLAB debugger | Assign the variable into the base workspace, such as K>> assignin('base','X',myvalue) |
Another way to avoid dynamic assignment is to explicitly declare the variable within
the function. For example, suppose a script named makeX.m
assigns a
value to variable X
. A function that calls makeX
and explicitly declares X
avoids the dynamic
assignment error because X
is in the function workspace. A common way
to declare a variable is to initialize its value to an empty array:
function noerror X = []; nestedfx function nestedfx makeX end end