Можете ли вы получить уникальный идентификатор объекта MATLAB?
Я отлаживаю некоторый код MATLAB и хочу удостовериться, что две ссылки на объект фактически ссылаются на один и тот же объект. Есть ли способ получить уникальный идентификатор для объектов (например, адрес памяти)?
Насколько я знаю, я не могу добавить свои собственные идентификаторы к объектам, так как они представляют собой потоки случайных чисел MATLAB.
Ответы
Ответ 1
Если вы используете OOP, вы можете добавить свойство ID
и установить его во время построения объекта.
java.rmi.server.UID()
- отличный способ получить уникальный идентификатор
Однако тестирование с помощью ==
будет проверять фактические дескрипторы, так что это больше проблема удобства использования.
classdef yourClass < handle
properties
ID
end
methods
function obj = yourClass()
obj.ID = java.rmi.server.UID();
end
end
end
Тогда будет довольно просто проверить ваши объекты.
Ответ 2
Если объекты, которые вы хотите сравнить, это потоки случайных чисел MATLAB (т.е. они имеют класс RandStream
), то они являются объектами-дескрипторами. В этом случае вам не нужны уникальные идентификаторы: если вы сравниваете их с помощью eq
или ==
, и они равны, то они являются одним и тем же объектом.
Как вы говорите, вы не можете добавить свои собственные свойства к объекту класса RandStream
, но если вы действительно хотели, чтобы вы могли подклассифицировать RandStream
и добавить собственное свойство в подкласс. Вы можете сохранить уникальный идентификатор в свойстве, сгенерированном с помощью char(java.util.UUID.randomUUID)
.
Ответ 3
Вы можете использовать поле UserData
, которое присутствует в каждом графическом объекте, чтобы сохранить уникальный идентификатор, сгенерированный вами. Если вы работаете с пользовательским классом, вы можете добавить подобное поле в свой класс.
Идентичность может быть уникальной, используя глобальный счетчик для назначения каждого нового идентификатора.