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
% Get the file's name that is currently being executed
file_fullpath = (mfilename("fullpath"))+".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
3条答案
按热度按时间eqqqjvef1#
还有一个办法
nargin(...)
在脚本上调用时会出错。因此,下面的短函数应该可以实现您的要求:这可能不是最好的方法,但它有效。
问候
0sgqnhkj2#
+1回答一个非常有趣的问题。
我可以想到一个方法来确定。解析执行的m文件本身,检查第一个非平凡的非注解行中的第一个单词。如果它是
function
关键字,则它是一个函数文件。如果不是,那就是剧本。这里有一个简洁的俏皮话:如果是函数文件,则结果值应为1;如果是脚本,则结果值应为0。
请记住,这段代码需要从相关的m文件中运行,而不是从单独的函数文件中运行。如果你想用它来创建一个通用函数(* 即 * 一个测试任何m文件的函数),只需将所需的文件名字符串传递给
textread
,如下所示:为了使这个函数更加健壮,您还可以添加错误处理代码,在尝试
textread
之前验证m文件是否确实存在。vjhs03f73#
您可以使用以下代码来检查m文件是函数还是脚本。