检查文件是否为Matlab中的函数或脚本



例如,假设我有一个名为my_file.m的文件,我想做:

file_fullpath = ['path_to_file', filesep, 'my_file.m'];
is_function(file_fullpath)

我想要一个命令(不是is_function(,它可以确定file_fullpath是一个函数还是只是一个脚本,如果文件不存在或有一些语法问题使其无法解析,则会抛出错误。我猜应该有一些内置函数来实现这一点,因为Matlab正确地为导航器中的函数和脚本分配了不同的图标。

我可以编写一个函数来解析文件,寻找合适的关键字,但这可能既不简单、快速,也不必要。

通过这个FileExchange提交:isfunction(),您可以使用以下各项的组合来确定它是否是一个函数:

% nargin gives the number of arguments which a function accepts, errors if not a func
nargin( ___ ); 
% If nargin didn't error, it could be a function file or function handle, so check
isa( ___, 'function_handle' ); 

更广泛地说,Jos为isfunction:添加了多个输出

function ID = local_isfunction(FUNNAME)
try    
nargin(FUNNAME) ; % nargin errors when FUNNAME is not a function
ID = 1  + isa(FUNNAME, 'function_handle') ; % 1 for m-file, 2 for handle
catch ME
% catch the error of nargin
switch (ME.identifier)        
case 'MATLAB:nargin:isScript'
ID = -1 ; % script
case 'MATLAB:narginout:notValidMfile'
ID = -2 ; % probably another type of file, or it does not exist
case 'MATLAB:narginout:functionDoesnotExist'
ID = -3 ; % probably a handle, but not to a function
case 'MATLAB:narginout:BadInput'
ID = -4 ; % probably a variable or an array
otherwise
ID = 0 ; % unknown cause for error
end
end

您可以使用以下代码来检查文件是函数还是脚本。

file_fullpath = ['path_to_file', filesep, 'my_file.m'];
t = mtree(file_fullpath ,'-file');
x = t.FileType
if(x.isequal("FunctionFile"))
disp("It is a function!");
end
if(x.isequal("ScriptFile"))
disp("It is a script!");
end

相关内容

  • 没有找到相关文章