exponenta event banner

постоянный

Определение постоянной переменной

Описание

пример

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