3

1 つまたは複数の変数を返す関数がありますが、(関数が成功したかどうかによって) 変数が変化すると、次のようには機能しません。

[resultA, resultB, resultC, resultD, resultE, resultF] = func(somevars);

関数が失敗したときに実際に値が与えられるのは最初の変数だけなので、これはエラーvarargout{2} not definedを返すことがあります。resultA代わりに、すべての出力を 1 つの変数に入れます。

output = func(somevars);

ただし、変数は構造体のプロパティとして定義されているため、 でアクセスする必要がありoutput.Aます。これ自体は問題ではありませんが、プロパティの数を数えて、適切な結果が得られたかどうかを判断する必要があります。

私は試してみましたがlength(output)、役に立たなかったので、誰かがこれを行う賢い方法を持っているなら、私は非常に感謝しています.numel(output)size(output)

4

2 に答える 2

12
length(fieldnames(output))

おそらくもっと良い方法がありますが、私はそれを考えることができません。

于 2009-05-19T04:21:05.900 に答える
3

マシューズの答えがあなたの問題に最適のようです。

nFields = numel(fieldnames(output));

おそらくあなたの状況には当てはまらないが、それでも知っておくと面白いかもしれない注意点が1つあります。構造体フィールドが空の場合でも、FIELDNAMESはそのフィールドの名前を返します。例えば:

>> s.a = 5;
>> s.b = [1 2 3];
>> s.c = [];
>> fieldnames(s)

ans = 

    'a'
    'b'
    'c'

空でないフィールドの数を知りたい場合は、次のいずれかのSTRUCTFUNを使用できます。

nFields = sum(~structfun(@isempty,s));

またはSTRUCT2CELLCELLFUNの組み合わせ:

nFields = sum(~cellfun('isempty',struct2cell(s)));

上記の両方が2の答えを返しますが、次のようになります。

nFields = numel(fieldnames(s));

3を返します。

于 2009-05-19T14:25:39.360 に答える