MATLAB Programming Fundamentals - MathWorks

(やまだぃちぅ) #1

Variables in Nested and Anonymous Functions


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
load Specify the variable name as an input to the
load function. Or, assign the output from the
load function to a structure array.
eval, evalin, or assignin If possible, avoid using these functions
altogether. See “Alternatives to the eval
Function” on page 2-87.
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

Variables in Nested and Anonymous Functions
Free download pdf