Contenido principal

persistent

Definir variables persistentes

Descripción

persistent var1 ... varN declara las variables especificadas como persistentes. Las variables persistentes son locales para la función en la que se declaran, pero sus valores se conservan en la memoria entre llamadas a la función. El código de la línea de comandos de MATLAB® y de otras funciones no puede cambiar variables persistentes.

Cuando MATLAB detecta por primera vez una instrucción persistent determinada, inicializa la variable persistente en una matriz vacía ([]).

MATLAB borra variables persistentes cuando se borra o modifica una función que está en la memoria. Para mantener una función en la memoria, utilice mlock.

ejemplo

Ejemplos

contraer todo

Cree la función myFun en la carpeta de trabajo actual. Cada vez que llama a la función, el valor de n aumenta.

function myFun()
    persistent n
    if isempty(n)
        n = 0;
    end
    n = n+1
end

En la línea de comandos, llame a myFun tres veces.

myFun
myFun
myFun
n =

     1


n =

     2


n =

     3

Borre myFun y llámela otras dos veces. Si se borra la función, también se borra la variable persistente.

clear myFun
myFun
myFun
n =

     1


n =

     2

Escriba una función que registre datos si han pasado al menos tres segundos desde la última entrada de registro. Defina logTime como una variable persistente que almacena la última vez que logData ha escrito en el archivo.

En un archivo de la carpeta de trabajo actual, defina la función logData.

function logData(fname,n)
    persistent logTime
    currTime = datetime;
    
    if isempty(logTime)
        logTime = currTime;
        disp('Logging initial value.')
        dlmwrite(fname,n)
        return
    end
    
    dt = currTime - logTime;
    if dt > seconds(3)
        disp('Logging.')
        dlmwrite(fname,n,'-append')
        logTime = currTime;
    else
      disp(['Not logging. ' num2str(seconds(dt)) ' sec since last log.'])
    end
end

En la línea de comandos, llame a logData en un bucle. El bucle tiene 10 iteraciones y cada iteración tarda aproximadamente 1 segundo. Por lo tanto, MATLAB escribe cuatro valores en myLog.txt (a aproximadamente 0, 3, 6 y 9 segundos).

for n = 1:10
    pause(1)
    logData('myLog.txt',rand)
end
Logging initial value.
Not logging. 1.005 sec since last log.
Not logging. 2.009 sec since last log.
Logging.
Not logging. 1.007 sec since last log.
Not logging. 2.013 sec since last log.
Logging.
Not logging. 1.005 sec since last log.
Not logging. 2.007 sec since last log.
Logging.

Llame a la función logData de nuevo para añadir otro valor.

logData('myLog.txt',rand)
Logging.

Borre la función logData para reinicializar la variable persistente. Llame a la función logData de nuevo. Esta vez, la función sobrescribe myLog.txt en lugar de añadir un valor.

clear logData
logData('myLog.txt',rand)
Logging initial value.

Sugerencias

  • Las variables persistentes son similares a las variables globales porque MATLAB crea un almacenamiento permanente para ambas. Se diferencian de las variables globales en que las variables persistentes son conocidas únicamente para la función que las declara. Por lo tanto, el código de la línea de comandos de MATLAB u otras funciones no pueden cambiar variables persistentes.

  • Dado que MATLAB inicializa una variable persistente en una matriz vacía ([]), normalmente las funciones comprueban si una variable persistente está vacía y, en ese caso, la inicializan.

    function myFun()
        persistent n
        if isempty(n)
            n = 0;
        end
        n = n+1;
    end

  • La declaración de una variable como persistente debe preceder a cualquier otra referencia a la variable, incluidos argumentos de entrada o salida. Por ejemplo, las declaraciones de persistent de las siguientes funciones no son válidas.

    function myfunA(x)
        persistent x
    end
    
    function myfunB
        x = 0;
        persistent x
    end

  • Para borrar una variable persistente, utilice clear con el nombre de la función que declara la variable. Por ejemplo, clear myFun.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

Consulte también

| | | | |