永久變數(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 中的關鍵字 static
與 persistent
是一樣的。
永久變數與全域變數一樣只能宣告一次,重複宣告不會有作用,例如:
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()
與其中的永久變數從記憶體中刪除。