1. ホーム
  2. matlab

[解決済み] MATLAB関数のいくつかの戻り値をエレガントに無視する方法

2022-08-06 15:38:09

質問

関数から「n 番目」の返り値を得るのに、全ての関数に対してダミー変数を作成する必要はありますか? n-1 の戻り値のダミー変数を作成することなく、関数から「n番目の」戻り値を得ることは可能でしょうか?

例えば、MATLABで以下のような関数があったとします。

function [a,b,c,d] = func()
a = 1;
b = 2;
c = 3;
d = 4;

ここで、私が興味があるのは 第三 の戻り値だけに興味があるとします。これは、1つのダミー変数を作成することで実現できます。

[dummy, dummy, variableThatIWillUse, dummy] = func;
clear dummy;

しかし、これはなんというか 醜い . のどれかのようなことができるかもしれないと思うのですが、できないのです。

[_, _, variableThatIWillUse, _] = func;

[, , variableThatIWillUse, ] = func;

variableThatIWillUse = func(3);

variableThatIWillUse = func()(3);

このような エレガント な方法はありますか?


今のところ、最良の解決策は、単純に variableThatIWillUse をダミー変数として使用することです。これによって、ワークスペースを汚染する(あるいはクリアする必要がある)本物のダミー変数を作成する必要がなくなりました。要するに、解決策は variableThatIWillUse を使うことです。それ以降の戻り値は単に無視することができます。

[variableThatIWillUse, variableThatIWillUse, variableThatIWillUse] = func;

私はこれが非常に醜いコードであると今でも思っています。

どのように解決するのですか?

これは多少ハックされていますが、動作します。

まずは簡単なサンプル関数です。

Func3 = @() deal(1,2,3);
[a,b,c]=Func3();
% yields a=1, b=2, c=3

さて、ここで重要なのは、もしあなたが変数 を2回 を複数式の代入の左辺で使用すると、先の代入が後の代入に邪魔されるということです。

[b,b,c]=Func3();
% yields b=2, c=3

[c,c,c]=Func3();
% yields c=3

(念のため、このテクニックが [mu,mu,mu]=polyfit(x,y,n) から気になることがあれば polyfit が3番目の引数である場合)。


もっと良い方法があります。 ManWithSleeveの回答 を参照してください。