MATLAB containers.Mapのキー値としてMATLAB handle objectsを使用しようとしているときに問題が発生します。MATLABハンドルオブジェクトのIDを取得する方法は?
ld(h1, h2)
は、ハンドルオブジェクトに対して線形の順序を定義します。したがって、ハンドルオブジェクトをマップのキー値として使用することに制限はありませんが、整数型または文字列型のみが許可されます。
この問題の回避策は、ハンドルオブジェクト(実際にはld
関数で比較されている)の実際のID(アドレス)を取得することです。
問題は、ハンドルオブジェクトのIDを取得する方法です。回避策は、静的メンバ関数で永続変数を使用してを行うことができることが分かった
。
この場合、すべてのクラスを次のような基本クラスから継承する必要があります。私は、Java/C#でオブジェクトHashCode
のようなものを聞いたことがない
classdef object < handle
properties (GetAccess = 'public', SetAccess = 'private')
id
end
methods (Access = 'protected')
function obj = object()
obj.id = object.increment();
end
end
methods (Static, Access = 'private')
function result = increment()
persistent stamp;
if isempty(stamp)
stamp = 0;
end
stamp = stamp + uint32(1);
result = stamp;
end
end
エンド
おそらく 'ld'ではなく' lt'という関係演算子、つまり 'lower'を意味しますか? – Mikhail
はいミハイル、それはタイプミスです。 – Vahagn