次のようなMATLABクラスを作成しました。
_classdef myclass
properties
x_array = [];
end
methods
function increment(obj,value)
obj.x_array = [obj.x_array ; value);
end
end
end
_
問題は、increment()
関数を呼び出したときにプロパティ_x_array
_が変更されないことです。例:
_>>s = myclass
>>increment(s,5)
>>s.x_array
ans = []
_
調査を行ったところ、MATLABがオブジェクトにLazy Copyを使用しているため、クラスにHANDLEクラスを継承させることでこれを解決できたはずであるという結論に達しましたが、解決できませんでした。なぜこれが発生するのか誰にもわかりません。そして、ハンドルクラスを拡張することが解決策ではない場合、これはそれを行う正しい方法ではありません:
_classdef myclass < handle
_
または追加の手順はありますか?
これは この質問 に似ています。要するに、あなたがしなければならないのは、ハンドルクラスから継承することだけです。
簡単な例
ファイル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
もっと簡単な方法があります。次のように、最初のインスタンスs
を上書きするだけで済みます。
s = increment(s,5);
詳細情報 ドキュメント内 。
PS:handleを使用することは問題ありませんが、コピー関数の動作方法は異なるため、使用方法に注意する必要があります。 handleを使用すると、実際にはobjへの新しいアドレス/参照を作成します