persistent

Задайте постоянную переменную

Синтаксис

Описание

пример

persistent var1 ... varN объявляет переменные var1 ... varN как стойкий. Постоянные переменные локальны по отношению к функции, в которой они объявлены, но их значения сохраняются в памяти между вызовами функции. Код в MATLAB® командная строка и в других функциях не могут изменять постоянные переменные.

Когда MATLAB впервые встречается с конкретным persistent оператор инициализирует постоянную переменную в пустую матрицу ([]).

MATLAB очищает постоянные переменные, когда вы очищаете или изменяете функцию, которая находится в памяти. Чтобы сохранить функцию в памяти, используйте mlock.

Примеры

свернуть все

Создайте функцию myFun в текущей рабочей папке. Каждый раз, когда вы вызываете функцию, значение n увеличивается.

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

В командной строке вызовите myFun три раза.

myFun
myFun
myFun
n =

     1


n =

     2


n =

     3

Очистить myFun и называйте это еще два раза. Очистка функции также очищает постоянную переменную.

clear myFun
myFun
myFun
n =

     1


n =

     2

Написание функции, которая регистрирует данные, если с момента последней записи журнала прошло не менее трех секунд. Определите logTime как постоянная переменная, которая сохраняет последний раз logData записан в файл.

В файле в текущей рабочей папке задайте 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

В командной строке вызовите logData в цикле. Цикл имеет 10 итераций, и каждая итерация занимает приблизительно 1 секунду. Поэтому MATLAB записывает 4 значения в myLog.txt (приблизительно на 0, 3, 6 и 9 секундах).

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.

Вызовите logData снова функция, чтобы добавить другое значение.

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

Очистить logData функция для повторной инициализации постоянной переменной. Вызовите logData снова функция. На этот раз функция перезаписывается myLog.txt вместо добавления значения.

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

Совет

  • Постоянные переменные аналогичны глобальным переменным, потому что MATLAB создает постоянное хранилище для обоих. Они отличаются от глобальных переменных, потому что постоянные переменные известны только функции, которая объявляет их. Поэтому код в командной строке MATLAB или других функциях не может изменять постоянные переменные.

  • Поскольку MATLAB инициализирует постоянную переменную в пустую матрицу ([]), обычно функции проверяют, является ли постоянная переменная пустой, и, если да, инициализируют ее.

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

  • Объявление переменной как постоянной должно предшествовать любым другим ссылкам на переменную, включая входные или выходные аргументы. Для примера, persistent объявления в следующих функциях недопустимы.

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

  • Чтобы удалить постоянную переменную, используйте clear с именем функции, которая объявляет переменную. Для примера, clear myFun.

Расширенные возможности

.

См. также

| | | | |

Представлено до R2006a