Jest to bit hack, ale ... tu jest funkcją, która powróci true
jeśli argument jest funkcją, a jeśli false
to nie jest. Możliwe, że istnieją wyjątki, w których to nie zadziała - czekam na komentarze.
EDIT - łowienie w przypadku, gdy funkcja jest w pliku mex ...
function b = isFunction(fName)
% tries to determine whether the entity called 'fName'
% is a function or a script
% by looking at the file, and seeing if the first line starts with
% the key word "function"
try
w = which(fName);
% test for mex file:
mx = regexp(w, [mexext '$']);
if numel(mx)>0, b = true; return; end
% the correct thing to do... as shown by YYC
% if nargin(fName) >=0, b = true; return; end
% my original alternative:
fid = fopen(w,'r'); % open read only
while(~feof(fid))
l = fgetl(fid);
% strip everything after comment
f = strtok(l, '%');
g = strtok(f, ' ');
if strcmpi(g, 'function'), b=true; break; end
if strlen(g)>0, b=false; break; end
end
fclose(fid);
catch
fprintf(1, '%s not found!\n');
b = false;
end
Czy nie otrzymasz również błędu, jeśli spróbujesz przekazać błędną liczbę argumentów do funkcji? Wtedy wygląda na to, że problem, o którym mówisz, nie jest specyficzny dla skryptu ... –
@Ilya To jednak inny błąd. Właśnie pokazałem błąd, aby wskazać, że MATLAB może odróżnić skrypty i funkcje, ponieważ informuje, że to jest skrypt. Ale może to tylko wymyśliło, po uruchomieniu go, nie wiem ... – Szabolcs
To trows wyjątku z identyfikatorem MATLAB: scriptNotAFunction, gdy tak się dzieje, więc można wykryć to przez try-catch tak samo jak Matlab, ale jeśli wypróbować działa skrypt wykona normalnie ... –