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

kjo*_*kjo 8 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
Run Code Online (Sandbox Code Playgroud)

这种黑客很难维护.(例如,每当MathWorks决定更改将nargin脚本作为输入时抛出的异常标识符类时,这将会中断.)

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

dfr*_*fri 6

你可以通过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
Run Code Online (Sandbox Code Playgroud)

  • 哦,我完全错过了!太棒了,干得好:) (3认同)
  • `isa(string_or_handle,'function_handle')`也可以. (2认同)