【问题标题】:Information about a function's input parameters from within another function [duplicate]有关来自另一个函数的函数输入参数的信息[重复]
【发布时间】:2012-11-07 03:32:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: function matlab input typechecking


    【解决方案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(),你应该得到一堆警告,并且没有严重的崩溃。

    【讨论】:

    • 谢谢,这可能是最好的方法。很抱歉迟到了,我一直在忙其他事情,忘记了这一切......
    【解决方案2】:

    您可能想查看的是try/catch

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      相关资源
      最近更新 更多