Сохранение и загрузка перечислений

Элементарные знания

Смотрите save и функции load и Сохраните и Процесс Загрузки для Объектов для получения общей информации о сохранении и загружаемых объектах.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

поля struct

Возвращенный struct имеет эти поля:

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

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

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

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

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

Похожие темы