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

时间:2016-01-30 00:07:42

标签: matlab

下面的函数是一个自行开发的hack,用于检测其参数是否引用脚本

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是否已经有内置函数来执行此操作?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

2013年,来自MathWorks的Loren对此问题提出了blog article

她使用的方法与您在问题中使用的方法相同 - 而且对于它的价值,消息标识符是相同的,至少在三年内没有改变(实际上它是'比这更长的时间),所以我认为你可以不再担心你的解决方案了。

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