これを行うには、varargout
を使用する必要があります。 varargout
はセル配列です(出力引数で入力します)、関数の伝統的な出力引数の代わりにvarargout
を置きます。しかし、多くの項目がvarargout
にあると、出力引数の数が決まります。
function varargout = functionName(nOutputs)
if nOutputs == 1
varargout{1} = [1,2];
else
varargout = {1,2};
end
end
functionName(1)
%// 1 2
[a, b] = functionName(2)
%// a = 1
%// b = 2
ユーザーが要求したどのように多くの出力引数を決定したい場合は、nargout
を使用することができます。
function varargout = functionName()
if nargout == 1
varargout = {[1, 2, 3]};
elseif nargout == 2
varargout = {1, [2, 3]};
else
varargout = {1, 2, 3};
end
end
functionName()
%// 1 2 3
[a,b] = functionName()
%// a = 1
%// b = [2, 3]
[a,b,c] = functionName()
%// a = 1
%// b = 2
%// c = 3
更新
あなたは、呼び出し側の変数出力引数が必要な場合は、同様にそのためのセル配列を使用して、すべての値を埋めるために{:}
とセルアレイの拡張に依存することができます。
nOutputs = 2;
output = cell(nOutputs, 1);
[output{:}] = functionName();
%// {1, [2, 3]}
それとも、出力数を(あなたが機能でvarargout
を使用していない場合にのみ動作します)わからない場合。
outputs = cell(nargout('functionName'), 1);
[outputs{:}] = functionName();
具体例をind2sub
とすると、次のようになります。
sz = [3, 2, 3];
outputs = cell(size(sz));
[outputs{:}] = ind2sub(sz, 5);
ああ、私はあなたを誤解していると思います。私は実際には、呼び出し元としてさまざまな出力を指定する方法を意味し、呼び出し先として指定することはできません。 – bridger
@Hua例を更新しました。 – Suever
ああ私はこの技術に精通していない、私はそれを試してみましょう。このヒントをありがとう! – bridger