exponenta event banner

Сохранить и загрузить перечисления

Базовые знания

См. раздел save и load функции и «Сохранить и загрузить процесс для объектов» для получения общей информации о сохранении и загрузке объектов.

Чтобы просмотреть список имен перечислений, определенных классом, используйте enumeration функция.

Встроенные классы перечисления и классы перечисления на основе значений

При сохранении перечислений, производных от встроенных классов или являющихся классами на основе значений со свойствами, MATLAB ® сохраняет имена элементов перечисления и определение каждого элемента.

При загрузке этих перечислений MATLAB сохраняет имена над базовыми значениями. Если сохраненное именованное значение отличается от текущего определения класса, MATLAB использует значение, определенное в текущем классе, и выдает предупреждение.

Простые и основанные на обработке классы перечисления

При сохранении простых перечислений, не имеющих свойств, суперклассов или значений, связанных с именами элементов или перечислениями, производными от handle MATLAB сохраняет имена и все базовые значения.

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

Причины: Загрузить как struct Вместо объекта

Если после сохранения перечисления в класс добавляется новое именованное значение или новое свойство, MATLAB не предупреждает при загрузке.

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

В следующих случаях MATLAB выдает предупреждение и загружает максимально возможное количество сохраненных данных. struct:

  • MATLAB не может найти определение класса

  • Класс больше не является классом перечисления

  • MATLAB не может инициализировать класс

  • В загруженном перечислении есть один или несколько элементов перечисления, не входящих в определение класса

  • Если класс является перечислением на основе значения со свойствами и свойством, существующим в файле, отсутствует в определении класса

struct Области

Возвращенный struct имеет следующие поля:

  • ValueNames - массив ячеек из строк, по одной на уникальное значение в массиве перечисления.

  • Values - массив того же размера, что и ValueNames содержащие соответствующие значения элементов перечисления с именем в ValueNames. В зависимости от типа класса перечисления, Values может быть одним из следующих:

    • Если класс перечисления является производным от встроенного класса, класс массива совпадает со встроенным классом. Значения в массиве являются базовыми значениями каждого элемента перечисления.

    • В противном случае a struct массив, представляющий пары имя свойства - значения свойства каждого элемента перечисления. Для простых перечислений на основе дескрипторов struct массив не имеет полей.

  • ValueIndices - a uint32 массив того же размера, что и исходное перечисление. Каждый элемент является индексом в ValueNames и Values массивы. Содержание ValueIndices представляет значение каждого объекта в исходном массиве перечисления.

Связанные темы