Main Content

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

마지막 로그 입력 이후 최소 3초가 경과한 경우 데이터를 기록하는 함수를 작성합니다. logTimelogData가 파일에 마지막으로 쓴 시간을 저장하는 영속 변수로 정의합니다.

현재 작업 폴더에 있는 파일에 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은 myLog.txt에 4개의 값을 씁니다(약 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 이전에 개발됨

참고 항목

| | | | |