26

次のような MATLAB クラスを作成しました。

classdef myclass

  properties
      x_array = [];
  end

  methods
    function increment(obj,value)
       obj.x_array = [obj.x_array ; value);
    end
  end
end

x_array問題は、関数を呼び出したときにプロパティが変更されないことincrement()です: ex:

>>s = myclass
>>increment(s,5)

>>s.x_array
ans = []

私はいくつかの調査を行い、これはMATLABがオブジェクトにLazy Copyを使用しているためであるという結論に達しました.クラスをHANDLEクラスに継承させることでこれを解決する必要がありましたが、そうではありませんでした。そして、ハンドルクラスを拡張することが解決策である場合、これは正しい方法ではありません:

classdef myclass < handle

または追加の手順はありますか?

4

2 に答える 2

27

これはこの質問に似ています。つまり、ハンドル クラスから継承するだけです。

簡単な例

ファイル myclass.m の内容

classdef myclass<handle
    properties
        x_array = []
    end
    methods
        function obj=increment(obj,val)
            obj.x_array=[obj.x_array val];
        end
    end
end

Matlab コマンド プロンプトから、次の操作を実行できます。

>> s=myclass;
>> s.increment(5)
>> s.increment(6)
>> s

s = 

myclass handle

properties:
    x_array: [5 6]

lists of methods, events, superclasses
于 2008-11-07T17:46:44.347 に答える
0

もっと簡単な方法があります。s次のように、最初のインスタンスを上書きするだけです。

s = increment(s,5);

詳細については、ドキュメントを参照してください。

PS: handleを使用しても問題ありませんが、コピー関数の動作が異なるため、使用方法に注意する必要があります。handleを使用すると、実際には obj への新しいアドレス/参照を作成しています

于 2016-09-08T12:32:42.360 に答える