このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
MATLAB®の基本的なオブジェクトには,ハンドルと値の2種類があります。
"値"オブジェクトは,コピー操作においてMATLAB基本型のように動作します。コピーは,それぞれ独立した値です。1つのオブジェクトに操作を実行しても,そのオブジェクトのコピーには影響しません。
“ハンドル”オブジェクトは,ハンドル変数により参照されます。ハンドル変数のコピーは同じオブジェクトを参照します。ハンドルオブジェクトに対して実行する操作は,そのオブジェクトを参照するすべてのハンドル変数から参照することができます。
クラスを定義する場合で,ハンドルオブジェクトのコピーをサポートするときは,ハンドルクラスのコピーの実装を参照してください。
MATLABの数値変数は値オブジェクトです。たとえば,一个
を変数b
にコピーしても,両方の変数は互いに独立です。一个
の値を変更してもb
の値は変わりません。
= 8;b =一个;
一个
に再代入します。b
は変わりません。
= 6;b
b = 8
一个
を変更しても,b
には影響しません。
清晰的一个b
b = 8
値オブジェクトにプロパティとして格納されている値のコピーの動作は,数値変数と同様です。たとえば,vobj1
は,プロパティ一个
をもつ値オブジェクトであるとします。
vobj1。= 8;
vobj1
をvobj2
にコピーした後vobj1
のプロパティ一个
の値を変更しても,コピーされたオブジェクトのプロパティの値vobj2.a
には影響しません。
vobj2 = vobj1;vobj1。一个= 5; vobj2.a
ans = 8
次に示すのは,数据
というプロパティを定義するHdClass
というハンドルクラスです。
classdefHdClass <处理属性数据结束方法函数obj = HdClass (val)如果Nargin > 0 obj。数据= val;结束结束结束结束
このクラスのオブジェクトを作成します。
hobj1 = HdClass (8)
このステートメントはセミコロンで終わらないので,MATLABによってオブジェクトに関する情報が表示されます。
hobj1 = HdClass with properties
変数hobj1
は,作成されたオブジェクトを参照するハンドルです。hobj1
をhobj2
にコピーすると,同じオブジェクトを参照する別のハンドルになります。
hobj2 = hobj1
hobj2 = HdClass with properties
ハンドルはオブジェクトを参照するので,ハンドルをコピーすると新しい変数名へハンドルがコピーされますが,ハンドルは引き続き同じオブジェクトを参照します。たとえば,hobj1
がプロパティ数据
をもつハンドルオブジェクトだとします。
hobj1。数据
ans = 8
hobj1
の数据
プロパティの値が変化し,コピーされたオブジェクトの数据
プロパティの値も変化します。
hobj1。数据= 5; hobj2.Data
ans = 5
hobj2
とhobj1
は同じオブジェクトに対するハンドルなので,コピーであるhobj2
を変更すると,ハンドルhobj1
を介してアクセスするデータも変化します。
hobj2。数据= 17; hobj1.Data
ans = 17
ハンドル変数を再代入すると,他のMATLAB変数を再代入する場合と同じ結果になります。オブジェクトを作成してhobj1
に代入するには,次のようにします。
hobj1 = HdClass (3.14);
hobj1
では,以前に参照していた同じオブジェクトではなく,新規のオブジェクトが参照されます。なお,hobj2
では引き続き以前のオブジェクトが参照されます。
ワークスペースからハンドルをクリアすると,MATLABはその変数を削除しますが,別のハンドルによって参照されるオブジェクトは削除しません。ただし,オブジェクトへの参照がない場合,MATLABはオブジェクトを破棄します。
同じオブジェクトを参照するhobj1
とhobj2
が与えられた場合に,オブジェクトに影響せずにいずれかのハンドルをクリアすることができます。
hobj1。数据= 2^8; clear hobj1 hobj2
hobj2 = HdClass属性:Data: 256
hobj1
とhobj2
の両方をクリアすると,オブジェクトに対する参照がなくなります。MATLABはオブジェクトを破棄し、そのオブジェクトで使用されるメモリを解放します。
任意数のハンドルで参照されるオブジェクトを削除するには,删除
を使用します。同じオブジェクトを参照するhobj1
とhobj2
が与えられた場合に,いずれかのハンドルを削除します。MATLABはオブジェクトを削除します。
hobj1 = HdClass (8);hobj2 = hobj1;删除(hobj1) hobj2
删除HdClass的句柄
ワークスペースから変数を削除するには,清晰的
を使用します。
オブジェクトを関数に渡すと,MATLABはオブジェクトのコピーを関数ワークスペースに渡します。関数がオブジェクトを変更する場合、MATLAB は関数ワークスペース内のオブジェクトのコピーのみを変更します。次のような場合、ハンドル クラスと値クラス間でのコピー動作の違いは重要です。
値オブジェクト——関数は,オブジェクトの変更されたコピーを返さなければなりません。呼び出し側ワークスペースのオブジェクトを変更するには,関数の出力を同じ名前の変数に代入します。
ハンドルオブジェクト——関数ワークスペース内のコピーは同じオブジェクトを参照します。したがって,関数は変更されたオブジェクトを返す必要はありません。
オブジェクトがハンドルオブジェクトかどうかを判定するには,関数isa
を使用します。obj
があるクラスのオブジェクトの場合,次のステートメントはobj
がハンドルかどうかを判定します。
isa (obj,“处理”)
たとえば,容器。地图
クラスは,ハンドルオブジェクトを作成します。
hobj =容器。地图({“红袜队”,“洋基},{“波士顿”,“纽约”});isa (hobj“处理”)
ans = 1
hobj
も容器。地图
オブジェクトです。
isa (hobj containers.Map)
ans = 1
hobj
のクラスをクエリすると容器。地图
オブジェクトであることがわかります。
类(hobj)
ans =容器。地图
関数类
はオブジェクトの特定のクラスを返します。