2013-01-21 10 views

cevap

6

+1.

Bunu belirlemenin bir yol düşünebiliriz. Yürütülen m-dosyanın kendisini ayrıştırın ve ilk olmayan önemsiz yorum olmayan satırdaki ilk sözcüğü kontrol edin. function anahtar kelimesi ise, bir işlev dosyasıdır. Eğer değilse, bu bir senaryo. Bir senaryo eğer bir işlev dosyasıdır ve 0 ise çıkan değeri 1 olmalıdır

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

: Burada düzgün bir liner bu. Bu kodun söz konusu m-dosyasından çalıştırılması gerektiğini ve elbette ayrı bir işlev dosyasından çalıştırılmaması gerektiğini unutmayın. Bunu (herhangi bir kütüğün testleri yani biri) dışında bir genel işlevi yapmak istiyorsanız, sadece bu yüzden gibi, textread istenen dosya adı dizesi geçirmek:

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

bu fonksiyon daha sağlam hale getirmek için Ayrıca, m-dosyasının gerçekte textread'u denemeden önce var olduğunu doğrulayan hata işleme kodunu da ekleyebilirsiniz.

+1

Mükemmel, teşekkürler! – slayton

7

Başka bir yol var. Bir komut dosyasında çağrıldığında, nargin(...) hata verir. Aşağıdaki kısa işlev nedenle soran ne yapmalıyım:

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 

En güzel yolu olmayabilir, ama işe yarıyor.

Saygılar

+0

Bu harika, teşekkürler! – slayton

İlgili konular