0

我正在尝试在 MATLAB 中编写一个通用函数,该函数将函数句柄作为一个参数,将路径作为第二个参数,并使用可选过滤器定义应使用指定文件夹中的哪些文件。这个想法是将输入的函数应用于所有匹配的文件。但是,我想确保这个函数没有不受控制的崩溃,所以我希望能够检查输入的函数是否甚至将文件作为输入参数。

总而言之,我想知道是否有办法找出某个输入是否与某个函数兼容,只有函数句柄才能继续。我知道 MATLAB 在这些方面非常松散,但如果有办法,请与我分享。

编辑:我知道 MATLAB 可能已经内置了类似的功能,我只是想增加我在 MATLAB 编码方面的知识和技能。

4

2 回答 2

1

我认为您无法检查函数是否将输入视为文件句柄。我同意 try/catch 方法:

function foo(input_func, path)
% for testing
if nargin==0
    input_func = @(s) fprintf('Filename: %s\n', s.name);
    path = pwd;
end
% check function handle
assert(isa(input_func, 'function_handle'), 'input_func is not a valid function handle!')

% get folder contents
listing = dir(path);

for i_item = 1:length(listing)
    item = listing(i_item);
    if ~item.isdir
        try
            input_func(item)
        catch E
            warning('Function threw error for %s', item.name)
        end
    end
end

如果您尝试用例如替换“fprintf”。sin(),你应该得到一堆警告并且没有严重的崩溃。

于 2012-11-07T07:53:18.210 回答
0

您可能想要研究的是try/catch

http://www.mathworks.com/help/matlab/ref/try.html

这样,您可以尝试使用您的文件评估您的函数,如果它不喜欢它,catch 应该捕获错误并可能执行相应的错误消息

于 2012-11-07T05:03:18.937 回答