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
varargin
および宣言された入力
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
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
varargin
を使用して、エントリポイント (最上位) 関数の引数を定義する場合、コード ジェネレーターは、固定数の入力引数を使用して C/C++ 関数を生成します。コードの生成時に指定する引数の数により、引数の固定数が決まります。varargin
に書き込むことはできません。入力引数に書き込む場合は、まず入力引数をローカル変数にコピーしてください。varargin
のインデックスはコンパイル時の定数でなければなりません。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
使用上の注意事項および制限事項:
varargin
に書き込むことはできません。入力引数に書き込む場合は、まず入力引数をローカル変数にコピーしてください。HDL ブロック プロパティ [アーキテクチャ] が
[MATLAB Datapath]
に設定された MATLAB function ブロックでの、varargin
の使用:varargin
の使用によってのみ cell 配列を作成することができます。関数cell
の使用やcellArr = {1,2,3}
のように中かっこを使用した cell 配列の作成など、他の初期化の手法は使用できません。cell 配列への複数のインデックス付けはできません。たとえば、次のコードの抜粋では HDL コード生成でエラーが発生します。
[x, y] = varargin{1:2};
バージョン履歴
R2006a より前に導入R2023a: ゼロ個以上の入力を指定した場合のパフォーマンスが向上
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) 搭載のテスト システムで行われました。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)