私はいくつかのMATLABコードをデバッグしていますが、オブジェクトへの2つの参照が実際に同じオブジェクトを参照していることを確認します。オブジェクト(メモリアドレスなど)の固有の識別子を取得する方法はありますか?MATLABオブジェクトのユニークな識別子を取得できますか?
私が知る限り、MATLAB乱数ストリームなので、オブジェクトに自分のIDを追加することはできません。
私はいくつかのMATLABコードをデバッグしていますが、オブジェクトへの2つの参照が実際に同じオブジェクトを参照していることを確認します。オブジェクト(メモリアドレスなど)の固有の識別子を取得する方法はありますか?MATLABオブジェクトのユニークな識別子を取得できますか?
私が知る限り、MATLAB乱数ストリームなので、オブジェクトに自分のIDを追加することはできません。
すべてのグラフィカルオブジェクトに存在するUserData
フィールドを使用して、生成した一意のIDを格納できます。ユーザー定義のクラスで作業している場合は、クラスに類似のフィールドを追加できます。
グローバルカウンタを使用して新しいアイデンティティを割り当てることで、アイデンティティを一意に保つことができます。
'UserData'はすべてのオブジェクトに存在しません。それはすべてのHandle Graphicsオブジェクトに存在しますが、それはOPが尋ねたものではありません。 –
@SamRobertsありがとう、私はちょうど実現し、答えを訂正 –
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
あなたのオブジェクトを確認するのはかなり簡単です。
比較したいオブジェクトがMATLAB乱数ストリーム(つまり、それらはクラスRandStream
です)であれば、それらはハンドルオブジェクトです。その場合、一意のIDは必要ありません。eq
または==
を使用してそれらを比較し、それらが等しい場合、それらは同じオブジェクトです。
あなたが言うように、クラスRandStream
のオブジェクトに独自のプロパティを追加することはできませんが、本当にしたい場合は、RandStream
をサブクラス化し、独自のプロパティをサブクラスに追加できます。 char(java.util.UUID.randomUUID)
で生成された一意の識別子をプロパティに格納できます。
私は簡単に参照を比較することはできません彼らはコードの異なる部分に住んでいるため。比較を行うためにコードを追加するか、RandStreamをサブクラス化する必要があるようです。 (私はより簡単で迅速な解決策を望んでいました) – jgosmann
おそらくそれより簡単な方法があると思います。たとえば、デバッグモードでコードを実行し、比較したい2つの参照がある2つのポイントのそれぞれで停止することができます。次に、 'assignin( 'base'、...)'を使ってベースワークスペースに保存します。次に、デバッガを終了して比較します。 –
MATLABの 'RandStream'を使用していますか?そうであれば、すでにハンドルクラスであり、等号 '==' operator( 'eq')を継承します。ルールはハンドルオブジェクトを比較するときに使用され、 'eq'演算子を使ってオブジェクトが同じハンドルであるかどうかをテストします。これらのオブジェクトが異なるハンドルであっても、オブジェクトが等しいプロパティ値を持つかどうかをテストするには 'isequal'を使います。参照セマンティクスを無視して、アルゴリズム、シード、および2つの乱数ストリームの内部状態を比較できます。 – Amro