是否有内置测试字符串(或句柄)是否引用脚本



下面的函数是一个自制的黑客,用于检测其参数是否引用脚本

function yesno = is_script(string_or_handle)
    try
        nargin(string_or_handle);
        yesno = false;
    catch me
        if ~strcmp(me.identifier, 'MATLAB:nargin:isScript')
            rethrow(me);
        end
        yesno = true;
    end
end

这样的黑客很难维护。 (例如,每当 MathWorks 决定更改nargin获取脚本作为输入时抛出的异常标识符类时,这个都会中断。

MATLAB 是否已经有内置函数来执行此操作?

您可以通过

仅对函数句柄运行try-catch块来修改您的 hack 以减少对未来"破坏"的修剪。在这种情况下,你会知道如果抛出错误,那么输入句柄是一个脚本(不需要调查错误细节;因此对异常标识符不敏感)。

function yesno = is_script(string_or_handle)
    yesno = false;
    if isa(string_or_handle,'function_handle') || ... 
        exist(string_or_handle,'file') == 2
        try
            nargin(string_or_handle);
        catch me
            yesno = true;
        end  
    end
end

MathWorks的Loren在2013年有一篇关于这个问题的博客文章。

她使用的方法与您在问题中所做的方法相同 - 就其价值而言,消息标识符是相同的,并且至少三年没有更改(实际上它比这长得多),所以我认为您可以停止担心您的解决方案。

有用的是,Loren还添加了一个额外的功能来区分类文件,以及函数和脚本。

相关内容

最新更新