2012-09-12 30 views
3

有時我不小心聲明瞭具有函數名稱的變量。Matlab中函數名稱變量的警告

這裏是一個構造例如:

max(4:5) % 5 
max(1:10)=10*ones(10,1); % oops, should be == instead of = 
max(4:5) % [10 10] 

目前,我總能找到這個硬盤的方式,它尤其是我不經常使用的函數名發生。

有什麼辦法讓matlab給出這個警告嗎?在其他警告中看到屏幕的右側是理想的,但我願意接受其他建議。

回答

2

由於Matlab允許您重載內置功能,所以在使用現有名稱時不會收到任何警告。

有,但是,一些小技巧超載現有功能的風險降到最低:

  • 使用explicitFunctionNames。有一個功能maxIndex而不是max

  • 經常使用「Tab」鍵。 Matlab將自動完成路徑上的函數(以及之前聲明的變量)。因此,如果變量自動完成,它已經存在。如果您不記得它是否也是函數,請點擊「F1」查看是否存在幫助頁面。

  • 使用函數而不是腳本,以便工作區中「錯誤」分配的變量不會弄亂您的代碼。

+0

選項卡技巧的確是一種很好的方法來檢查您要使用的單詞是否「乾淨」。如果一個變量已經被放入工作區,它仍然會給出錯誤的否定結果。 –

+1

@ DennisJaheruddin:使用函數代替腳本可以解決這個問題。看我的編輯。 – Jonas

0

如有疑問,請檢查:

exist max 
ans = 
    5 

help exist看,你可以看到「max」是一個函數,且不應被指定爲一個變量。

>> help exist 
exist Check if variables or functions are defined. 
exist('A') returns: 
    0 if A does not exist 
    1 if A is a variable in the workspace 
    2 if A is an M-file on MATLAB's search path. It also returns 2 when 
     A is the full pathname to a file or when A is the name of an 
     ordinary file on MATLAB's search path 
    3 if A is a MEX-file on MATLAB's search path 
    4 if A is a MDL-file on MATLAB's search path 
    5 if A is a built-in MATLAB function 
    6 if A is a P-file on MATLAB's search path 
    7 if A is a directory 
    8 if A is a class (exist returns 0 for Java classes if you 
    start MATLAB with the -nojvm option.) 
+0

我想這可以幫助我在事後檢查中檢查一些變量,如果我面臨一個奇怪的問題:停止程序,保存所有變量名稱列表,清除所有變量,然後使用存在的所有名稱。 但是,如果有一種方法可以在問題出現之前發出警告,那就更好了。 –

1

我非常確定mlint也可以檢查。

通常我會盡可能地將代碼包裝到函數中。這種覆蓋的範圍侷限於功能的範圍 - 所以沒有持久的問題,除了意外假設當然。

+0

我試圖在mlint偏好中找到它,但沒有成功。 即使啓用所有選項,一個簡單的測試文件仍然沒有mlint警告:max = 2:10; result = max(3:4); 是否有更高級的方法來更改不在首選項屏幕中的mlint設置? –

+1

我看到的具體警告不存在。但有兩個將有助於識別此類問題:*使用變量,但可能未設置(腳本)*,在首次使用'max'時發出警告。另外一個通常將結果存儲在變量中,並且'a = max(1:10)= 10 * ones(10,1)'將被標記爲錯誤。 – bdecaf

+0

我想這隻會讓我困擾,如果我試圖在命令窗口中做一些快速評估。至少這個評論讓我確信,它不太可能被潛入我的代碼中而被忽視。 –