以编程方式区分脚本和函数

Sza*_*lcs 6 matlab function

给定文件名,如何在MATLAB中以编程方式区分脚本和函数?

如果我尝试将参数传递给脚本,我会得到Attempt to execute SCRIPT somescript as a function:.有没有办法检测这个而不试图执行它?


更新:正如@craq指出的那样,在这个问题发布后不久,在MATLAB Central上有一篇关于此的文章:http://blogs.mathworks.com/loren/2013/08/26/what-kind-of-matlab -file-是-这个/

YYC*_*YYC 9

没有找到一个干净的解决方案,但你可以使用try-catch(如@Ilya建议)和nargin

编辑 - function用于避免某些命名冲突; 用于exist进一步分类输入(例如MEX文件)

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
Run Code Online (Sandbox Code Playgroud)