1

クラスの定数プロパティである文字列のセル配列を反復するのに問題があります。セル配列を 1 から最後までインデックス付けしようとするたびに、Matlab がクラッシュします。私は何が間違っているのでしょうか?

コードは次のようになります。

classdef classA
    properties(Constant)
        ValidElements = {'Elem1', 'Elem2', 'Elem3'};
    end
    properties
        AInfo
    end
    function this = classA(info)
        1stvalidelement = classA.ValidElements{1};
        validelementslist = classA.ValidElements{1:end};
        ...
        ...
        this.AInfo = info;
    end
    ...
end

コンストラクター内では、1 行目は問題なく正常に実行されますが、2 行目で matlab がクラッシュします。なぜこれができるのか、私にはまったくわかりません。私を助けてください。

ありがとう。

4

1 に答える 1

1

1 つには、(おそらく) 括弧を使用するつもりである中括弧を使用しています。

比較

>> A = {'one' 'two' 'three'}';
>> A{1:2}
    ans =
        one
    ans =
        two
>> A(2:3)
    ans = 
        'two'
        'three'

違いは、括弧 ( ()) はセルの一部を新しいセルとして返すのに対し、カーリー ( ) はセルのエントリを (カンマ区切りの) リストとして{}返すことです。したがって、この場合、中括弧は複数の値を返し、それを単一の変数に割り当てようとします。

別の理由として、プロパティにアクセスする関数が ( Static) メソッド ブロックにありません。

もう1つのこと1stvalidelementは、有効な変数名ではありません。

したがって:

classdef classA
    properties(Constant)
        ValidElements = {'Elem1', 'Elem2', 'Elem3'};
    end
    properties
        AInfo
    end

    method (Static)

        function this = classA(info)
            firstvalidelement = classA.ValidElements{1};
            validelementslist = classA.ValidElements(1:end);
            ...
            ...
            this.AInfo = info;
        end

        ...

    end
end
于 2014-02-07T08:21:01.477 に答える