このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
varargin
可変長の入力引数のリスト
構文
説明
varargin
は、任意の数の入力引数を関数で受け入れ可能にする関数定義ステートメントの入力変数です。小文字を使用して、varargin
を指定します。明示的に宣言された任意の入力の後に、varargin
を最後の入力引数として含めます。
関数を実行した場合、varargin
は 1 行 N 列の cell 配列となり、N は明示的に宣言された入力の後に関数が受け取る入力の数を表します。関数が、明示的に宣言された入力の後に入力を受け取らない場合、varargin
は空の cell 配列となります。
例
acceptVariableNumInputs.m
というファイルに、可変個の入力を受け入れて各入力値を表示する関数を定義します。
type acceptVariableNumInputs
function acceptVariableNumInputs(varargin) disp("Number of input arguments: " + nargin) celldisp(varargin) end
複数の入力を指定してこの関数を呼び出します。
acceptVariableNumInputs(ones(3),'some text',pi)
Number of input arguments: 3 varargin{1} = 1 1 1 1 1 1 1 1 1 varargin{2} = some text varargin{3} = 3.1416
definedAndVariableNumInputs.m
というファイルに、2 つの入力を想定し、さらに任意の数の追加入力も受け入れる関数を定義します。
type definedAndVariableNumInputs
function definedAndVariableNumInputs(X,Y,varargin) disp("Total number of input arguments: " + nargin) formatSpec = "Size of varargin cell array: %dx%d"; str = compose(formatSpec,size(varargin)); disp(str) end
複数の入力を指定してこの関数を呼び出します。
definedAndVariableNumInputs(7,pi,rand(4),datetime('now'),'hello')
Total number of input arguments: 5 Size of varargin cell array: 1x3
2 つの入力を指定してこの関数を呼び出します。varargin
は空の cell 配列になります。
definedAndVariableNumInputs(13,42)
Total number of input arguments: 2 Size of varargin cell array: 0x0
variableNumInputAndOutput.m
というファイルに、可変個の入力と出力を受け入れる関数を定義します。
type variableNumInputAndOutput
function varargout = variableNumInputAndOutput(varargin) disp(['Number of provided inputs: ' num2str(length(varargin))]) disp(['Number of requested outputs: ' num2str(nargout)]) for k = 1:nargout varargout{k} = k; end end
2 つの入力と 3 つの出力を指定して、この関数を呼び出します。
[d,g,p] = variableNumInputAndOutput(6,'Nexus')
Number of provided inputs: 2 Number of requested outputs: 3
d = 1
g = 2
p = 3
入力と出力を何も指定せずに、もう一度この関数を呼び出します。
variableNumInputAndOutput
Number of provided inputs: 0 Number of requested outputs: 0
拡張機能
使用上の注意および制限:
varargin
を使用して、エントリポイント (最上位) 関数の引数を定義する場合、コード ジェネレーターは、固定数の入力引数を使用して C/C++ 関数を生成します。コードの生成時に指定する引数の数により、引数の固定数が決まります。varargin
に書き込むことはできません。入力引数に書き込む場合は、まず入力引数をローカル変数にコピーしてください。varargin
のインデックスはコンパイル時の定数でなければなりません。
使用上の注意および制限:
varargin
に書き込むことはできません。入力引数に書き込む場合は、まず入力引数をローカル変数にコピーしてください。varargin
のインデックスはコンパイル時の定数でなければなりません。
バージョン履歴
R2006a より前に導入HDL ブロック プロパティ [アーキテクチャ] が [MATLAB Datapath]
に設定された MATLAB Function ブロックで varargin
を使用して、入力引数で cell 配列に複数のインデックスを付けることができます。たとえば、次のコード スニペットの HDL コードを生成できるようになりました。
[x, y] = varargin{1:2};
varargin
を使用して可変数の入力引数を指定した場合のパフォーマンスが向上しています。たとえば、現在のフォルダー内の timingTest.m
という名前のファイルで、1 つの入力を予期し、さらに多くの入力を受け入れる関数を作成します。
function timingTest(x,varargin) n = 1e6; tic for i = 1:n y = myFun(x,varargin{:}); end toc end function y = myFun(x,varargin) if nargin == 1 y = x; elseif nargin == 3 y = x + varargin{1} + varargin{2}; else y = NaN; end end
パフォーマンス向上の度合いは、varargin
が空かどうかによって異なります。パフォーマンスの向上は、varargin
が空の場合に最も顕著です。
空の
varargin
—timingTest(1)
を実行してこのコードの時間を測定します。以前のリリースと比較して、このコードは約 22 倍速くなっています。おおよその実行時間は以下のとおりです。R2022b: 0.404 秒
R2023a: 0.018 秒
空ではない
varargin
—timingTest(1,2,3)
を実行してこのコードの時間を測定します。以前のリリースと比較して、このコードは約 2 倍速くなっています。おおよその実行時間は以下のとおりです。R2022b: 1.428 秒
R2023a: 0.734 秒
このコードの時間測定は、Windows® 10、Intel® Xeon® CPU E5-1650 v4 (3.60 GHz) 搭載のテスト システムで行われました。
HDL ブロック プロパティ [アーキテクチャ] が [MATLAB Datapath]
に設定された MATLAB Function ブロックで関数に対して HDL コードを生成できます。これらの関数では、入力引数 varargin
は使用できます。HDL 関数 checkhdl
では、varargin
を使用して cell 配列が正しくアクセスされ、初期化されているかどうかを判別できます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)