MATLAB: 可変長の入力引数を持つ関数のひな形

MATLABで可変長の入力引数をもつ関数をつくるときのメモです。

基本的にparse 関数入力の解析のままなのですが、註釈を入れてみました。

入力チェックの関数は状態を検出 is* の関数をベースに作ると良いです。

function s = varaginTest(mustArg, varargin)

    defaultOpt1 = 20;
    defaultOpt2 = 'foo'; % char型(文字ベクトル)でないとうまく行かない
    PossibleOpt2 = {'foo', 'bar', 'baz', 'qux'}; % see RFC3092

    p = inputParser; % 入力パーサー・オブジェクトを作成する
    isValidNum = @(x) isnumeric(x) && isscalar(x) && (x > 1); % 入力チェック用の無名関数
    addRequired(p, 'mustArg', isValidNum); % 必須の引数をパーサーに追加
    addOptional(p, 'option1', defaultOpt1, isValidNum); % 任意の引数をパーサーに追加
    addParameter(p, 'name', defaultOpt2, ...
        @(x) any(validatestring(x, PossibleOpt2)));
    
    parse(p, mustArg, varargin{:}); % ここでparse
    
    s = p;
end