2015-06-04 49 views
4

超載clear()帶功能很容易。但是如何訪問上游功能的工作區(從中調用clear)來清除工作區? builtin('clear')只會清除重載功能的工作區。如何超載清零

function ret = someFun(a,b) 
    ret = a + b; 
    clear 
    ret = 1; 
end 

function clear() 
    persistent boring 
    if isempty(boring), boring = 0; end 
    boring = boring + 1; 
    builtin('clear') 
end 

截圖:上游功能的工作區調用重載clear功能 workspace of the upstream function after calling the overloaded clear function

+0

或者你可以不超載'clear'。也許你可以調用你的函數'clearLocal'。或者,考慮到你正在把你的重載'clear'的功能,也許你可以把它稱爲'clearWithCounter'。 –

回答

4

使用evalin'caller'選項之後。也就是說,替換你行

builtin('clear')

通過

evalin('caller', 'builtin(''clear'')') 

這將明確從調用函數的工作區所有變量。

如果您想希望明確從MATLAB基工作區所有變量,使用'base'選項:

evalin('base', 'builtin(''clear'')') 
+4

幾年前,MathWorks進行了一項練習,他們得到了一批新用戶並記錄了他們的命令行歷史,以瞭解人們如何學習MATLAB。有一個人開始了,出於某種原因,他輸入的第一件事是「clear = 3」。之後,他的經歷很快就下降了,他的命令歷史包括諸如「清除所有」,「明確清除」,「清除」,「清除暗殺」,「殺死」,「殺死matlab」等內容。這很有趣。 –

+1

之後,有人認爲'clear'應該被做成一個關鍵字,所以你不能超載它。這從來沒有發生過,因爲有很多像OP這樣的人過度「清晰」,向後兼容性會成爲問題。但是,儘管@Luis的回答爲您提供瞭解決問題的方法,但請不要因爲任何原因超負荷「清除」。畢竟,如果你重載了'builtin',會發生什麼?據我所知,除了關閉MATLAB之外別無他法。 –

+0

@SamRoberts的確非常有趣! :-) –