3

関数の頑丈な主力製品があるとします。

[a b c d] = lotsOfComputation();

ユースケースによっては、その出力の 1 つまたは 2 つだけが必要な場合があります。そのような場合、出力を無視して~. lostOfComputation関数内からこれを検出することは可能ですか?

(はい、より洗練された解決策は、個別の関数へのリファクタリングであることを知っています。当面のユースケースでは既にこれを実行しましたが、疑問は頭の中に残っていました。)

4

2 に答える 2

3

確かに、nargoutを試してみてください。出力引数の数が返されます。実際には引数を省略しても動作しますが、~ を引数としてカウントしてしまいます。次に例を示します。

function [a b c] = test()
  a=0;b=0;c=0;
  disp(nargout);
end

>> [a, b] = test();
   2
>> [~, b] = test();
   2
>> [~, ~, ~] = test();
   3

したがって、おそらくあなたの正確な質問に対する答えはノーです。少なくともnargout.

于 2012-09-13T22:16:52.923 に答える
1

あなたの質問に直接答えるために、私が知っていることではありません。

ただし、無駄になる可能性のある計算を節約するためにこれを要求している場合は、関数をサブ関数に分割できますが、を使用して元の投稿の一般的な構文を保持しますdeal

たとえば、常にaand bfromlotsOfComputationが必要な場合は、関数を次のように作り直すことができます。

[a b] = lotsOfComputation();

cと の 2 つの別々の計算を行うことができます。d

[c] = cComp();
[d] = dComp();

その後、元の関数を次のように書くことができます

[a b c d] = deal(lotsOfComputation(), cComp(), dComp());

cまたはの出力を無視したい場合はd、関数呼び出しを deal 関数の null 値に置き換えることができます。

[a b ~ d] = deal(lotsOfComputation(), 0, dComp());

これが質問に直接答えないことは知っていますが、理論的には興味深いかもしれません:)

于 2012-09-13T22:18:33.370 に答える