2013-05-08 49 views
3

我寫了一段代碼,它調用了許多函數,而這些代碼又調用了多個子函數。在多個函數文件中設置操作模式的優雅方式

我正在從命令行調用主文件,並用某些參數補充了調用以啓動某些我已經考慮過的模式。

E.g. octave classify_file.m --debug <file>將以我的自定義調試模式運行,該模式將常量debug設置爲1,然後輸出所有圖和相關變量。省略參數只輸出1個變量。

相似地,我有一個templatehistogram模式,除了根據模式輸出更多的變量,矩陣和圖表外,其他模塊基本上都做同樣的事情。

現在,我必須包括debugtemplate和常數作爲參數給每個函數,如果我希望它們受到各自模式的影響。

這很麻煩和混亂,必須有更好的辦法。我從來沒有使用過全局變量,但是這會是一個使用它的好地方嗎?什麼是這個問題的優雅解決方案?

回答

1

這是一種全局變量可以派上用場的情況,雖然您可能已經意識到它們有時會被忽視,並且在matlab中也會有一定的性能影響。就我個人而言,我不認爲一直沿着調用堆棧傳遞模式太糟糕了 - 儘管您將所有3個視爲單獨的參數?你可以做最不重要的是把它們放在一個struct在最高級別的功能,使您只有1個參數:

mode.debug = [whatever] 
mode.histogram = [whatever] 
mode.template = [whatever] 
myFunction(mode); 

,或者,如果你只能有一個模式,在對一些整型常量時間呢?

mode = MODE_DEBUG 

mode = MODE_NONE 

我會定義創建簡短的函數的常數,這是pi不變作品,例如如何。

最後,還有一個替代我喜歡的全局變量,它是使用persistent變量的函數。例如:

function m = debugMode(newValue) 
    persistant isModeOn; 

    if nargin > 0 
    isModeOn = newValue 
    end 
    m = isModeOn; 
end 

這樣,您就可以撥打debugMode(1)來設置它,你可以調用m = debugMode隨時隨地來獲取值。

相關問題