2013-01-21 15 views

回答

6

+1對於一個非常有趣的問題。

我可以想出一種方法來確定。解析執行的m文件本身並檢查第一個非重要的非註釋行中的第一個單詞。如果它是function關鍵字,它是一個功能文件。如果不是,它是一個腳本。 這裏有一個整潔的一行代碼:

strcmp(textread([mfilename '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function') 

結果值應爲1,如果它是一個函數文件,並0,如果它是一個腳本。

請記住,該代碼需要從有問題的m文件運行,當然不是從單獨的函數文件運行。如果你想使一個泛型函數的是(一個測試任何m文件),只需通過所需的文件名字符串textread,像這樣:

function y = isfunction(x) 
    y = strcmp(textread([x '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function') 

爲了使這個功能更強大的,您還可以添加錯誤處理代碼,在嘗試textread之前驗證該m文件實際存在。

+1

完美,謝謝! – slayton

7

還有另外一種方法。如果在腳本上調用它,則會出現錯誤nargin(...)。因此,以下短的功能應該做你所要求的:

function result = isFunction(functionHandle) 
% 
% functionHandle: Can be a handle or string. 
% result:   Returns true or false. 

% Try nargin() to determine if handle is a script: 
try  
    nargin(functionHandle); 
    result = true; 
catch exception 
    % If exception is as below, it is a script. 
    if (strcmp(exception.identifier, 'MATLAB:nargin:isScript'))  
     result = false; 
    else 
     % Else re-throw error: 
     throw(exception); 
    end 
end 

它可能不是最漂亮的方式,但它的工作原理。

Regards

+0

這太棒了,謝謝! – slayton

相關問題