2015-04-29 70 views
0

MATLAB's FAQ中所述,`clear(function_name)`從RAM中刪除函數的替代方法?

1.3.3.1。爲什麼當我在MATLAB中編輯函數文件時,直到所有內容被清除或MATLAB重新啓動之前,MATLAB纔看到變化?

當您在MATLAB中編寫M文件時,您可以編寫腳本或 函數。區別在於從磁盤讀取腳本,並且每次調用時都會逐行解析。一個函數被加載到 RAM中執行。因爲它被加載到RAM中,所以當您編輯 函數時,在對新函數 函數進行調用之前,該更改不會加載到RAM中。

爲了讓MATLAB認識到你的編輯功能,類型

clear functions to clear all functions, or 

clear <function name> to clear just your function out of RAM. 

這是一個重大的痛苦,當我正在開發一個功能&反覆編輯它(我使用外部編輯器的大部分時間) 。我想投入最後一行,在調試過程至少,像

clear(myfunc)

,但我很擔心有害的副作用。有誰知道有沒有?另外,我寧願有一種方法來配置MATLAB,以便在頂層函數(即從控制檯調用的函數)終止後,它不會自動將所調用函數存儲在RAM中。這甚至有可能嗎?

編輯:我應該提到的是,MATLAB的行爲是不一致的。有時我的編輯會在保存m文件後生效,其他時間不會生效即使我正在使用MATLAB IDE編輯器窗口進行編輯。

回答

0

誠實地說,MATLAB有一個非常強大的編輯器,所以你真的應該使用它 。它會讓你的生活更輕鬆。 (只是一個意見)

  • 除非你正在運行通過它加強不改變代碼的代碼會被執行,直到代碼重新運行(最好用清除工作空間)。

  • clear(myfunc)將清除該功能創建的變量。您可以在任何函數或腳本末尾添加您想要在最後清除的所有變量。這會讓你控制只清除你想要的。一旦變量被清除,唯一的影響是,如果稍後在代碼中再次調用這些變量,則會發生錯誤,因爲它們不再存在。

  • 如果您只是簡單地測試該特定功能,並且希望通過每次不調用輸入來節省時間並且想要同時清除工作區和命令窗口。您可以在函數定義下添加以下代碼。

如果您保留以下代碼並從另一個函數或腳本調用函數,只要輸入對外可用,代碼就會被忽略。任何添加到if語句的內容只會在您沒有輸入時調用該函數doc nargin。您可以將它添加到頂層函數中,並且只需按下運行按鈕或f5而無需鍵入命令窗口來運行代碼。

function [ output1, output2 ] = blah(input1, input2) 
if nargin == 0 
    clc 
    clear all 
    %above two lines will clear the workspace and command window when you run 
    %the function 

    %define function inputs 

    %(optionally add the following to behave as if you inserted a breakpoint 
    %in the location just before the error occurred (great for debugging) 
    db stop if error 
end 

*您還可以添加一個捷徑在MATLAB界面右上方以清除工作區等被點擊時,他們的代碼片段起來。

0

的hackish *想法是:

我寧願有一個方法來配置MATLAB所以它不會自動存儲在內存中,一旦頂級函數調用的函數(即一個從控制檯調用)終止。這甚至有可能嗎?

*這是我可能使用的那種東西,同時建議其他人爲什麼這是一個壞主意,也可能使用無證件(因此不可靠)的東西。


具體來說,如果您使用外部編輯器我想你將不得不點擊命令窗口中運行該功能...

commandWindowHandle = ... 
handle(com.mathworks.mde.desk.MLDesktop.getInstance.getClient('Command Window'... 
.getComponent(0).getComponent(0).getComponent(0),'CallbackProperties'); 

commandWindowHandle.MouseClickedCallback = 'clear functions' 

它不清除函數定義關於退出功能而不點擊命令窗口

注意:如果某個功能正在運行,回調將不會觸發

對於一個潛在的更可靠,但更浪費版本:

commandWindowHandle.KeyPressedCallback= 'clear functions' 

將有助於確保*定義是明確的,但浪費的每個按鍵將運行「功能清晰」 ......雖然經過一個按鍵這將因爲內存中沒有功能,所以速度會更快!

*無法保證我知道有些方法可能會失敗......在上一個函數調用完成之後,在命令窗口中至少有一次擊鍵是明智的!


要禁用這些設置回調空字符串''

commandWindowHandle.MouseClickedCallback = '' 
commandWindowHandle.KeyPressedCallback= '' 

相關問題