11.9.3 Parsing Arguments

Last-modified: 2025-03-22 (土) 21:30:52

11.9.3 引数の解析

inputParser前述の検証関数のいずれも十分でない場合は、関数に対して非常に複雑な入力チェックを実行できる クラスもあります。

:p = 入力パーサー ()

inputParser クラスの オブジェクトpを作成します。

このクラスは、関数の引数を簡単に解析できるように設計されています。このクラスは、次の 4 種類の引数をサポートしています。

必須(を参照addRequired);
オプション(を参照addOptional);
名前付き(を参照addParameter);
スイッチ( を参照addSwitch)。
これらのメソッドを使用して関数 API を定義した後、指定された引数をparseメソッドで解析し、アクセサーを使用して結果にアクセスできるようになりますResults。

: inputParser.Parameters

すでに定義されているパラメータ名のリストを返します。(読み取り専用)

: inputParser.Results

引数名をフィールド名として、対応する値を持つ構造体を返します。(読み取り専用)

: inputParser.Unmatched

に似た構造体を返しますResultsが、パラメータが一致しません。(読み取り専用)KeepUnmatchedプロパティを参照してください。

: inputParser.UsingDefaults

デフォルト値を使用している引数の名前を含むセル配列を返します。(読み取り専用)

: inputParser.FunctionName = name

エラー メッセージで使用する関数名を設定します。デフォルトは空の文字列です。

: inputParser.CaseSensitive = boolean

引数名の一致で大文字と小文字を区別するかどうかを設定します。デフォルトは false です。

: inputParser.KeepUnmatched = boolean

どのパラメータにも一致しない文字列引数を解析してUnmatchedプロパティに格納するかどうかを設定します。デフォルトは false です。false の場合、最初の認識されない引数でエラーが発生し、解析が停止します。引数SwitchとParameter引数は混在できるため、一致しない引数の型を知ることはできないことに注意してください。Octave は、一致しない引数はすべて Parameter型であると想定し、したがってその後に値が続く必要があります。

: inputParser.PartialMatching = boolean

名前がオプションを一意に識別する限り、Parameterおよびオプションの引数名を短縮形式で指定できるかどうかを設定します。デフォルトは true です。たとえば、引数はパラメータ と一致しますが、パラメータ もある場合は失敗します。 Switch'optopt_coloropt_case'

: inputParser.StructExpand = boolean

関数に渡される構造体がパラメータ/値のペア (パラメータ = フィールド名) に展開されるかどうかを設定します。デフォルトは true です。

次の例は、このクラスの使用方法を示しています。

function check (varargin)
 p = inputParser ();                      # create object
 p.FunctionName = "check";                # set function name
 p.addRequired ("pack", @ischar);         # mandatory argument
 p.addOptional ("path", pwd(), @ischar);  # optional argument
 ## Create anonymous function handle for validators
 valid_vec = @(x) isvector (x) && all (x >= 0) && all (x <= 1);
 p.addOptional ("vec", [0 0], valid_vec);
 ## Create two arguments of type "Parameter"
 vld_type = @(x) any (strcmp (x, {"linear", "quadratic"}));
 p.addParameter ("type", "linear", vld_type);
 vld_tol = @(x) any (strcmp (x, {"low", "medium", "high"}));
 p.addParameter ("tolerance", "low", vld_tol);
 ## Create a switch type of argument
 p.addSwitch ("verbose");
 p.parse (varargin{:});  # Run created parser on inputs
 ## The rest of the function can access inputs by using p.Results.
 ## For example, get the tolerance input with p.Results.tolerance
endfunction
check ("mech");           # valid, use defaults for other arguments
check ();                 # error, one argument is mandatory
check (1);                # error, since ! ischar
check ("mech", "~/dev");  # valid, use defaults for other arguments
check ("mech", "~/dev", [0 1 0 0], "type", "linear");  # valid
## following is also valid.  Note how the Switch argument type can
## be mixed in with or before the Parameter argument type (but it
## must still appear after any Optional arguments).
check ("mech", "~/dev", [0 1 0 0], "verbose", "tolerance", "high");
## following returns an error since an Optional argument, 'path',
## was given after the Parameter argument 'type'.
check ("mech", "type", "linear", "~/dev");

注 1 : 関数には 4 つの API タイプを任意に組み合わせることができますが、特定の順序で出現する必要があります。 Required引数は最初に指定する必要があり、その後に任意のOptional引数が続くことができます。引数ParameterとSwitch引数のみを混在させることができ、最初の 2 つのタイプの後に出現する必要があります。

注 2 :関数 API で とOptionalの両方の引数が混在している場合、文字列のオプション引数が検証に失敗すると、引数の終わりとみなされます。残りの引数は、任意のまたは引数 と比較されます 。 ParameterOptionalParameterSwitch

See also: nargin, validateattributes, validatestring, varargin.