3

クラス コンストラクターで、別のメソッドを呼び出してプロパティを初期化すると、そのプロパティが変更されないのはなぜですか?

コード例:

classdef Test
    properties
        prop    
    end 

    methods
        function obj = Test()
            obj.init(); 
        end     
        function init(obj)
            obj.prop = 1;
        end     
    end 
end

次に、実行しA = Test();て を取得しA.prop = []ました。

4

1 に答える 1

9

ハンドルクラス

classdef Test < handle

これにより、参照されたオブジェクトにメソッドが適用されます。

値クラス

変更されたオブジェクトを返す必要があります:

function obj = Test()
    obj.init();
end

する必要があります

function obj = Test()
    obj = obj.init();
end

ただし、init()変更されたオブジェクトも呼び出し元に返していません。

function init(obj)
    obj.prop = 1;
end

どちらであるべきか

function obj = init(obj)
    obj.prop = 1;
end

ハンドル クラスと値クラスの比較も参照してください。

于 2013-05-24T19:27:00.830 に答える