3

このコードを実行して単純なクラスを作成すると:

classdef myclass
    properties
        m = 2;
        n = m + 2;
    end
end

エラーが発生します:

Undefined function or variable 'm'.
Error in myclass (line 1)
classdef myclass 

どうしてこれなの?この最小限の例では、a) コンストラクターを配置してもエラーが引き続き発生するため、コンストラクターを省略しました。b) 単体テスト クラスでこのエラーが発生し、コンストラクターは MATLAB 2013b のそのようなクラスでは呼び出されません。

4

3 に答える 3

5

このページには、問題を説明する可能性のあるメモがあります。

メモ: プロパティの既定値の評価は、値が最初に必要になったときにのみ行われ、MATLAB が最初にクラスを初期化するときに 1 回だけ行われます。MATLAB は、クラス インスタンスを作成するたびに式を再評価しません。

これは、クラス インスタンスを作成するときにmまだ初期化されていないため、それを使用して別のプロパティのデフォルトを設定できないことを意味しますn

それを機能させる唯一の方法はm、定数プロパティとして宣言することです。

classdef myclass
    properties (Constant = true)
       m=2; 
    end
    properties
        n = myclass.m + 2;
    end
end

しかし、変更したい場合はおそらく役に立ちませんm

于 2013-11-22T21:51:53.390 に答える
1

初期化をコンストラクターに移動することもできます。

classdef myclass
    properties
        m = 2;
        n;
    end
    methods
        function obj = myclass(obj)
            obj.n = obj.m + 2;
        end
    end
end
于 2015-09-02T22:35:14.537 に答える