Как получить идентификатор объекта дескриптора MATLAB? - PullRequest
5 голосов
/ 23 июня 2011

Проблема возникает, когда я пытаюсь использовать объекты-манипуляторы MATLAB в качестве значений ключа в контейнерах MATLAB. Карта .

ld( h1, h2 ) определяет линейный порядок наобрабатывать объекты, поэтому не должно быть никаких ограничений на использование объектов-дескрипторов в качестве значений ключей для карт, однако допускаются только целочисленные или строковые типы.

Обходным путем для этой проблемы может быть получение фактических идентификаторов (адресов) дескриптораобъекты (которые в основном сравниваются в функции ld).

Итак, вопрос: как получить идентификатор объекта дескриптора?


Выяснилось, чтоОбойти это можно , используя постоянные переменные в статических функциях-членах.

В этом случае вам следует наследовать все ваши классы от базового класса, как показано ниже.

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  

end

1 Ответ

1 голос
/ 23 июня 2011

Я никогда не слышал о чем-то похожем на объект HashCode в Java / C #, применяемый к MATLAB OO. Если вы получаете адрес объекта MATLAB (введите format debug в командном окне), его по-прежнему нецелесообразно использовать, поскольку он не останется таким же, как в C ++, но будет перемещен системой (управляемой памятью).

Вы можете вручную реализовать интерфейс getHashCode() для ваших объектов MATLAB. В отличие от традиционного хеш-кода, вы должны убедиться, что ваш хеш-код всегда отличается для разных объектов - задача не из простых!

Функция сравнения MATLAB по умолчанию sort, по-видимому, внутренне использует хеш-код объекта, но это вам здесь не поможет - сравнение объектов на самом деле является ортогональным понятием к их хеш-коду.

...