0

xただし、失敗したかどうかをテストしようとし[]ていますが、それは些細なことのようですが、その方法がわかりません。

私が走ればx = rmi('get',subsystemPath);

ans = []

私はもう試した

x == []
x
isempty(fieldnames(x))
isEmpty(x)

しかし、何も機能しません

function requirements = GetRequirementsFromSubsystem(subsystemPath)
    x = rmi('get',subsystemPath);
    if(isempty(fieldnames(x)))          %%%%%%%%%%%%%%%%<------
        requirements = 0;
    else
        requirements = {x.description}; % Fails if do this without a check
    end
end

何か案は?

4

1 に答える 1

0

xですstructよね?その場合、MATLAB ニュースグループのこの投稿によると、構造体の空には次の 2 種類があります。

  1. S = struct()=> フィールドなし

    isempty(S)Sフィールドのない [1 x 1] 構造体であるため、FALSE です。

  2. S = struct('Field1', {})=> フィールドですが、データはありません

    isempty(S)Sフィールドを持つ [0 x 0] 構造体であるため、TRUE です。

私にとってはisempty(fieldnames(S))、少なくとも Octave の最初のケースでのみ機能します。

一方x、構造体ではなく配列の場合は、機能するisempty(x)はずです。

>> S = struct()
S =

  scalar structure containing the fields:


>> isempty(S)
ans = 0
>> isempty(fieldnames(S))
ans =  1
>> S = struct('Field1',{})
S =

  0x0 struct array containing the fields:

    Field1

>> isempty(S)
ans =  1
>> isempty(fieldnames(S))
ans = 0
>> x = []
x = [](0x0)
>> isempty(x)
ans =  1
于 2013-07-23T15:15:57.100 に答える