永久變數(Persistent Variables)

在函數中的永久變數(persistent variable)會將其儲存的值持續保持在記憶體中,即使離開函數後,其值依然存在,永久變數與全域變數的差異在於永久變數只存在於其宣告的區域,在其他的區域是不可見的。例如:

function count_calls ()
  persistent calls = 0;
  printf ("'count_calls' has been called %d times\n", ++calls);
endfunction

這裡自行定義了一個函數 count_calls(),此函數使用一個永久變數紀錄被呼叫的次數,使用迴圈呼叫此函數三次:

for i = 1:3
  count_calls ();
endfor

輸出為

'count_calls' has been called 1 times
'count_calls' has been called 2 times
'count_calls' has been called 3 times

永久變數可以使用 persistent 關鍵字宣告,例如:

persistent a
persistent a b
persistent c = 2
persistent d = 3 e f = 5

Octave 中的永久變數與 C 語言中的靜態變數(static variable)有相同的作用,Octave 中的關鍵字 staticpersistent 是一樣的。

永久變數與全域變數一樣只能宣告一次,重複宣告不會有作用,例如:

persistent pvar = 1
persistent pvar = 2

此時 pvar 的值是 1,不是 2

若永久變數只有被宣告,但沒有指定其值,其預設會是一個空矩陣,因此可以依照其是否為空矩陣來判斷其是否已經被初始化,例如:

function count_calls2 ()
  persistent calls;
  if (isempty (calls))
    calls = 0;
  endif
  printf ("'count_calls' has been called %d times\n", ++calls);
endfunction

這個 count_calls2() 函數與上面的 count_call() 函數的功能是一樣的。

宣告在函數中的永久變數會一直存在記憶體中,直到將整個函數刪除,永久變數的值才會從記憶體中刪除,要將函數刪除可以使用 clear 指令:

clear -f count_call

這樣會將函數 count_call() 與其中的永久變數從記憶體中刪除。