Можете ли вы получить уникальный идентификатор объекта 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, которое присутствует в каждом графическом объекте, чтобы сохранить уникальный идентификатор, сгенерированный вами. Если вы работаете с пользовательским классом, вы можете добавить подобное поле в свой класс.

Идентичность может быть уникальной, используя глобальный счетчик для назначения каждого нового идентификатора.