Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Funciones anidadas

¿Qué son las funciones anidadas?

Una función anidada es una función que está completamente contenida dentro de una función primaria. Cualquier función de un archivo de programa puede incluir una función anidada.

Por ejemplo, esta función denominada contiene una función anidada denominada:parentnestedfx

function parent disp('This is the parent function') nestedfx     function nestedfx       disp('This is the nested function')    end  end

La diferencia principal entre las funciones anidadas y otros tipos de funciones es que pueden tener acceso y modificar las variables que se definen en sus funciones primarias. Como resultado:

  • Las funciones anidadas pueden usar variables que no se pasan explícitamente como argumentos de entrada.

  • En una función primaria, puede crear un identificador para una función anidada que contenga los datos necesarios para ejecutar la función anidada.

Requisitos para las funciones anidadas

  • Normalmente, las funciones no requieren una instrucción.end Sin embargo, para anidar cualquier función en un archivo de programa, las funciones de ese archivo deben usar una instrucción.allend

  • No se puede definir una función anidada dentro de ninguna de las instrucciones de control del programa, como,,, o.MATLAB®if/elseif/elseswitch/caseforwhiletry/catch

  • Debe llamar a una función anidada directamente por nombre (sin usar) o mediante un identificador de función que haya creado con el operador (y no).feval@str2func

  • Todas las variables de las funciones anidadas o las funciones que las contienen deben definirse explícitamente. Es decir, no se puede llamar a una función o un script que asigne valores a variables a menos que esas variables ya existan en el espacio de trabajo de la función. (Para obtener más información, consulte.)Las variables en funciones anidadas y anónimas

Compartir variables entre funciones principales y anidadas

En general, las variables de un espacio de trabajo de una función no están disponibles para otras funciones. Sin embargo, las funciones anidadas pueden acceder y modificar variables en los espacios de trabajo de las funciones que las contienen.

Esto significa que tanto una función anidada como una función que la contiene pueden modificar la misma variable sin pasar esa variable como argumento. Por ejemplo, en cada una de estas funciones, y tanto la función main como la función anidada pueden acceder a la variable:main1main2x

function main1 x = 5; nestfun1     function nestfun1       x = x + 1;    end   end
function main2 nestfun2     function nestfun2       x = 5;    end      x = x + 1; end

Cuando las funciones primarias no utilizan una variable determinada, la variable permanece local en la función anidada. Por ejemplo, en esta función denominada, las dos funciones anidadas tienen sus propias versiones de que no pueden interactuar entre sí:mainx

function main    nestedfun1    nestedfun2     function nestedfun1       x = 1;    end     function nestedfun2       x = 2;    end end

Las funciones que devuelven argumentos de salida tienen variables para las salidas en su espacio de trabajo. Sin embargo, las funciones primarias solo tienen variables para la salida de funciones anidadas si las solicitan explícitamente. Por ejemplo, esta función tiene variable en su espacio de trabajo:parentfunnoty

function parentfun x = 5; nestfun;     function y = nestfun      y = x + 1;    end   end

Si modifica el código de la siguiente manera, la variable se encuentra en el área de trabajo de:zparentfun

function parentfun x = 5; z = nestfun;     function y = nestfun      y = x + 1;    end   end

Uso de identificadores para almacenar parámetros de función

Las funciones anidadas pueden utilizar variables de tres fuentes:

  • Los argumentos de entrada

  • Las variables definidas dentro de la función anidada

  • Las variables definidas en una función primaria, también denominadas variablesámbito externo

Cuando se crea un identificador de función para una función anidada, ese identificador no solo almacena el nombre de la función, sino también los valores de las variables de ámbito externo.

Por ejemplo, cree una función en un archivo llamado.makeParabola.m Esta función acepta varios coeficientes polinómicos y devuelve un identificador a una función anidada que calcula el valor de ese polinomio.

function p = makeParabola(a,b,c) p = @parabola;     function y = parabola(x)    y = a*x.^2 + b*x + c;    end  end

La función devuelve un identificador a la función que incluye valores para los coeficientes y.makeParabolaparabolaabc

En la línea de comandos, llame a la función con valores de coeficiente de, y.makeParabola1.3.230 Utilice el manejador de función devuelto para evaluar el polinomio en un punto determinado:p

p = makeParabola(1.3,.2,30);  X = 25; Y = p(X)
Y =   847.5000

Muchas funciones aceptan entradas de identificador de función para evaluar funciones en un rango de valores.MATLAB Por ejemplo, trace la ecuación parabólica de:-25+25

fplot(p,[-25,25])

Puede crear varios identificadores para la función que cada uno use diferentes coeficientes polinómicos:parabola

firstp = makeParabola(0.8,1.6,32); secondp = makeParabola(3,4,50); range = [-25,25];  figure hold on fplot(firstp,range) fplot(secondp,range,'r:') hold off

Visibilidad de las funciones anidadas

Cada función tiene un cierto, es decir, un conjunto de otras funciones a las que es visible.Alcance Hay una función anidada disponible:

  • Desde el nivel inmediatamente superior. (En el código siguiente, la función puede llamar o, pero no o.)ABDCE

  • Desde una función anidada en el mismo nivel dentro de la misma función primaria. (La función puede llamar y puede llamar.)BDDB

  • Desde una función en cualquier nivel inferior. (La función puede llamar o, pero no.)CBDE

    function A(x, y)              % Main function B(x,y) D(y)     function B(x,y)            % Nested in A    C(x)    D(y)        function C(x)           % Nested in B       D(x)       end    end     function D(x)              % Nested in A    E(x)        function E(x)           % Nested in D       disp(x)       end    end end

La manera más fácil de ampliar el ámbito de una función anidada es crear un identificador de función y devolverlo como un argumento de salida, como se muestra en.Uso de identificadores para almacenar parámetros de función Solo las funciones que pueden llamar a una función anidada pueden crear un identificador para ella.

Temas relacionados