2013-09-04 24 views
10

私はいくつかのMATLABコードをデバッグしていますが、オブジェクトへの2つの参照が実際に同じオブジェクトを参照していることを確認します。オブジェクト(メモリアドレスなど)の固有の識別子を取得する方法はありますか?MATLABオブジェクトのユニークな識別子を取得できますか?

私が知る限り、MATLAB乱数ストリームなので、オブジェクトに自分のIDを追加することはできません。

+2

MATLABの 'RandStream'を使用していますか?そうであれば、すでにハンドルクラスであり、等号 '==' operator( 'eq')を継承します。ルールはハンドルオブジェクトを比較するときに使用され、 'eq'演算子を使ってオブジェクトが同じハンドルであるかどうかをテストします。これらのオブジェクトが異なるハンドルであっても、オブジェクトが等しいプロパティ値を持つかどうかをテストするには 'isequal'を使います。参照セマンティクスを無視して、アルゴリズム、シード、および2つの乱数ストリームの内部状態を比較できます。 – Amro

答えて

0

すべてのグラフィカルオブジェクトに存在するUserDataフィールドを使用して、生成した一意のIDを格納できます。ユーザー定義のクラスで作業している場合は、クラスに類似のフィールドを追加できます。

グローバルカウンタを使用して新しいアイデンティティを割り当てることで、アイデンティティを一意に保つことができます。

+1

'UserData'はすべてのオブジェクトに存在しません。それはすべてのHandle Graphicsオブジェクトに存在しますが、それはOPが尋ねたものではありません。 –

+0

@SamRobertsありがとう、私はちょうど実現し、答えを訂正 –

5

OOPを使用している場合は、オブジェクトの構築中にプロパティIDを追加して設定できます。

java.rmi.server.UID()はユニークなIDの

を得るための良い方法ですが==によってテストは、実際のハンドルをチェックしますので、これはユーザビリティの問題の詳細です。

classdef yourClass < handle 

properties  
    ID 
end 

methods 
    function obj = yourClass() 
     obj.ID = java.rmi.server.UID(); 
    end 

end 

end 

あなたのオブジェクトを確認するのはかなり簡単です。

5

比較したいオブジェクトがMATLAB乱数ストリーム(つまり、それらはクラスRandStreamです)であれば、それらはハンドルオブジェクトです。その場合、一意のIDは必要ありません。eqまたは==を使用してそれらを比較し、それらが等しい場合、それらは同じオブジェクトです。

あなたが言うように、クラスRandStreamのオブジェクトに独自のプロパティを追加することはできませんが、本当にしたい場合は、RandStreamをサブクラス化し、独自のプロパティをサブクラスに追加できます。 char(java.util.UUID.randomUUID)で生成された一意の識別子をプロパティに格納できます。

+0

私は簡単に参照を比較することはできません彼らはコードの異なる部分に住んでいるため。比較を行うためにコードを追加するか、RandStreamをサブクラス化する必要があるようです。 (私はより簡単で迅速な解決策を望んでいました) – jgosmann

+2

おそらくそれより簡単な方法があると思います。たとえば、デバッグモードでコードを実行し、比較したい2つの参照がある2つのポイントのそれぞれで停止することができます。次に、 'assignin( 'base'、...)'を使ってベースワークスペースに保存します。次に、デバッガを終了して比較します。 –

関連する問題