分類: Octave

Octave 變數(Variables)

永久變數(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() 與其中的永久變數從記憶體中刪除。

Page: 1 2 3 4

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: 數學

Recent Posts

[開箱] Marttiini MFT G10 芬蘭北歐直刀

本篇是 Marttiini M...

3 年 ago

[開箱] 一般打火棒、鎂塊打火棒

本篇是鎂塊打火棒與一般普通打火...

3 年 ago

[開箱] 瑞典 BAHCO 396-Lap 魚牌軍規摺疊鋸

本篇為瑞典 BAHCO 396...

3 年 ago

[DIY] 野炊水煮蛋、紅豆湯記錄

本篇記錄今年過年期間帶阿玄在家...

3 年 ago

[竹北素食] 善菓堂 SHAN GUO TANG

本篇是我最近去竹北善菓堂用餐時...

3 年 ago

Linux 複製檔案 cp 指令用法教學與範例

本篇介紹如何在 Linux 系...

3 年 ago