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

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

Смотрите 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 может быть одно из следующего:

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

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

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

Похожие темы