MATLAB中对象的保存和加载过程

目录

保存和加载对象

保存哪些信息?

如何加载属性数据?

加载过程中的错误

对属性验证的更改


保存和加载对象

​使用 save 和 load 来存储和重新加载对象:

cpp 复制代码
save filename object
load filename object

保存哪些信息?

将对象保存在 MAT 文件中会保存:

  • 对象类的全名,包括任何包限定符

  • 动态属性的值

  • 当类的第一个对象保存到 MAT 文件时该类定义的所有属性默认值。

  • 所有属性的名称和值,但存在以下例外:

    • 如果属性的当前值与类定义中指定的默认值相同,则不会保存属性。

    • 如果属性的 Transient、Constant 或 Dependent 特性设置为 true,则不会保存属性。

如何加载属性数据?

从 MAT 文件加载对象时,load 函数会还原对象。

  • load 创建一个新对象。

  • 如果类 ConstructOnLoad 属性设置为 true,则 load 调用不带参数的类构造函数。否则,load 不会调用类构造函数。

  • load 将保存的属性值赋给对象属性。这些所赋的值受制于由类定义的任何属性验证。然后调用由类定义的属性 set 方法(Dependent、Constant 或 Transient 属性除外,这些属性不会保存或加载)。

  • load 将保存在 MAT 文件中的默认值赋给其值未保存的属性,因为这些属性在保存时设置为默认值。这些赋值导致对类定义的属性 set 方法的调用。

  • 如果正在加载的对象的属性包含对象,load 将创建一个相同类的新对象并将其赋给该属性。如果属性中包含的对象为句柄对象,则该属性会包含一个相同类的新句柄对象。

MATLAB® 调用属性 set 方法,以确保在类定义发生变化的情况下属性值仍然有效。

加载过程中的错误

如果类的新版本删除、重命名或更改了属性的验证,load 在尝试设置已更改或删除的属性时可能生成错误。

如果在从文件加载对象时出现错误,MATLAB 会执行以下操作之一:

  • ​如果该类定义一个 loadobj 方法,MATLAB 将保存的值返回 struct 中的 loadobj 方法。

  • 如果该类没有定义 loadobj 方法,MATLAB 会以静默方式忽略这些错误。load 函数用不会产生错误的属性值来重新构成对象。

在传递给 loadobj 方法的 struct 中,字段名称对应于属性名称。字段值是对应属性的保存值。

如果保存的对象派生自多个具有同名私有属性的超类,则 struct 仅包含最直接超类的属性值。

对属性验证的更改

如果类定义更改了属性验证,使得加载的属性值不再有效,则 MATLAB 会用当前定义的默认值代替该属性。该类可以定义 loadobj 方法或转换器方法,以提供类版本之间的兼容性。

相关推荐
William一直在路上15 分钟前
Python数据类型转换详解:从基础到实践
开发语言·python
看到我,请让我去学习1 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
GUET_一路向前1 小时前
【C语言防御性编程】if条件常量在前,变量在后
c语言·开发语言·if-else·防御性编程
曳渔1 小时前
UDP/TCP套接字编程简单实战指南
java·开发语言·网络·网络协议·tcp/ip·udp
楼田莉子1 小时前
C++算法题目分享:二叉搜索树相关的习题
数据结构·c++·学习·算法·leetcode·面试
三千道应用题1 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf
hqxstudying2 小时前
JAVA项目中邮件发送功能
java·开发语言·python·邮件
咪咪渝粮2 小时前
JavaScript 中constructor 属性的指向异常问题
开发语言·javascript
最初的↘那颗心2 小时前
Java HashMap深度解析:原理、实现与最佳实践
java·开发语言·面试·hashmap·八股文
pusue_the_sun2 小时前
数据结构——栈和队列oj练习
c语言·数据结构·算法··队列