Previous Up Next

Buy this book at Amazon.com

This HTML version of the book is provided as a convenience, but some math equations are not translated correctly. The PDF version is more reliable.

Chapter 16  Nested Functions

This appendix provides an alternative way to structure code that involves helper functions, which were discussed in Section 8.1; there, we saw an example of an M-file with more than one function:

function res = duck()
    error = error_func(10)
end

function res = error_func(h)
    rho = 0.3;      % density in g / cm^3
    r = 10;         % radius in cm
    res = ...
end

Because the first function ends before the second begins, these functions are at the same level of indentation. Functions like these are parallel, as opposed to nested. A nested function is defined inside another, like this:

function res = duck()
    error = error_func(10)

    function res = error_func(h)
        rho = 0.3;      % density in g / cm^3
        r = 10;         % radius in cm
        res = ...
    end
end

The function duck is the enclosing function and error_func is the nested function.

Nesting functions is useful because the variables of the outer function can be accessed from the inner function. This is not possible with parallel functions.

In this example, using a nested function makes it possible to move the parameters rho and r out of error_func.

function res = duck(rho)
    r = 10;
    error = error_func(10)

    function res = error_func(h)
        res = ...
    end
end

Both rho and r can be accessed from error_func. By making rho an input argument, we made it easier to test duck with different parameter values.

Nested functions can also help de-clutter code (but not always). For more information on nested functions, please consult the official documentation at https://www.mathworks.com/help/matlab/matlab_prog/nested-functions.html.

Are you using one of our books in a class?

We'd like to know about it. Please consider filling out this short survey.


Think Bayes

Think Python 2e

Think Stats 2e

Think Complexity


Previous Up Next