non ha trovato una soluzione pulita, ma è possibile probabilmente usare try-catch
(come suggerito @Ilya) e nargin
EDIT - utilizzare function
da evitare qualche conflitto di denominazione; utilizzare exist
per classificare ulteriormente l'ingresso (ad esempio MEX-File)
function is_script = is_a_script(varargin)
% is_a_script(varargin) returns one of the following:
% 1: if the input is a script
% 0: if the input is a function
% -1: if the input is neither a function nor a script.
is_script = 0;
switch(exist(varargin{1}))
case 2
% If the input is not a MEX or DLL or MDL or build-in or P-file or variable or class or folder,
% then exist() returns 2
try
nargin(varargin{1});
catch err
% If nargin throws an error and the error message does not match the specific one for script, then the input is neither script nor function.
if(strcmp(err.message, sprintf('%s is a script.',varargin{1})))
is_script = 1;
else
is_script = -1;
end
end
case {3, 4, 5, 6} % MEX or DLL-file, MDL-file, Built-in, P-file
% I am not familiar with DLL-file/MDL-file/P-file. I assume they are all considered as functions.
is_script = 0;
otherwise % Variable, Folder, Class, or other cases
is_script = -1;
end
Non si ottiene un errore anche se si tenta di passare un numero errato di argomenti a una funzione? Quindi, sembra che il problema di cui stai parlando non sia specifico dello script ... –
@Ilya Tuttavia, si tratta di un errore diverso. Ho appena mostrato l'errore per sottolineare che MATLAB può dire la differenza tra gli script e le funzioni, poiché riporta che questa cosa è uno script. Ma forse l'ha capito solo dopo averlo eseguito, non lo so ... – Szabolcs
E 'un'eccezione con l'identificatore MATLAB: scriptNotAFunction quando ciò accade, quindi puoi rilevarlo provando lo stesso come matlab, ma se prova funziona script verrà eseguito normalmente ... –