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

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

См. save и load functions и Save and Load Process for Objects для получения общей информации о сохранении и загрузке объектов.

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

Похожие темы