0

指定したフォルダー内のどのファイルを使用するかを定義するオプションのフィルターを使用して、関数ハンドルを 1 つの引数として、パスを 2 つ目の引数として取る 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 に答える