Programming and Data Types    

転送する引数の数を可変にする

関数vararginvarargoutは、任意の数の入力引数、または任意の数の出力引数を関数に自由に設定させることができます。この節では、これらの関数の使い方を説明します。

MATLABは、セル配列内に指定した全ての入力引数をパックします。これは、配列要素の代わりに、セルから構成されるMATLAB配列の特別な種類です。各々のセルは、任意のサイズのデータ、または、任意の種類のデータを含むことができます。すなわち、あるものは数値データベクトルで、同じ配列の中の他のものは文字データ配列と言うように設定できます。出力引数に対して、関数コードは、セル配列にパックしなければならないので、MATLABは引数を呼び出し側に出力します。

つぎの例題の関数は、任意の数の2要素ベクトルを受け入れ、ラインを使って、これらを繋げることができます。

この方法をコード化して、関数testvarは、つぎのような例を使って種々の入力を処理しましょう。

vararginの内容を分解

vararginは、セル配列の中のすべての入力引数を含んでいるので、データを抜き出すためにセル配列にインデックスを付けて使う必要があります。例えば、

インデックス付きのセル配列は、2つのサブスクリプト成分をもっています。

上のコードの中で、インデックス付き式{i} は、varargini番目のセルにアクセスします。式(2)は、セルの内容の2番目の要素を表現します。

varargoutの内容をパック

任意の出力引数の数を受け入れるので、すべての出力をvarargout セル配列にパックしなければなりません。関数がいくつの出力引数を読み込んでいるのかを決めるためにnargoutを使います。例えば、つぎのコードは、2列の入力配列を受け入れます。最初の列はx座標を表し、2番目の列はy座標を表します。これは、配列を[xi yi]ベクトルに分離し、前の例題の関数testvarに転送します。

for ループの内部の代入ステートメントは、セル配列の代入シンタックスを使います。ステートメントの左辺、セル配列は、データがセルの内部に入ることを示す中括弧を使ってインデックスを示しています。セル配列代入での完全な情報に対しては、"構造体とセル配列"を参照してください。

つぎの例は、testvar2のコールの方法を示しています。

引数リスト内の vararginと varargout

varargin 、または、 varargout は、引数リストの中で、必要な入力変数、または、必要な変数に続けて、最後に設定します。これは、関数が読み込むために必要な引数をまず設定しなければならないからです。例えば、つぎの関数宣言ラインは、vararginvarargoutの正しい位置を示しています


  Function引数の数のチェック ローカル変数とグローバル変数