PDA

查看完整版本 : 为什么我的MATLAB(R2008a)对象的类在保存/加载周期中发生变化?


poster
2019-12-10, 16:49
更新:这是一个已知的错误 (http://www.mathworks.com/support/bugreports/details.html?rp=461224) -链接需要登录Mathworks才能访问。

错误报告摘要

如果使用7.6版(R2008a)保存到MAT文件的MATLAB用户定义类的实例的属性值之一是另一个MATLAB类的实例,则可能无法正确加载。

简要地说,Mathworks报告说以前保存的顶级自定义对象可能未正确加载(如下所述),并且在SAVE步骤上发生了错误。因此,数据在MAT文件中已损坏。

根据我的经验,这似乎是断断续续的。在一个数据分析应用程序中,我写出了75个MAT文件,其中37个保存了此损坏:(

注意用户定义的对象。我在保存时添加了以下测试,以确保数据未损坏

save('MAT_file_name.mat'); tmp=load('MAT_file_name.mat'); if ~isa(tmp.bb,'superClass') msgbox({'THE FILE WAS NOT SAVED PROPERLY', ... ' ', ... [' MAT_file_name.mat',]}) end 原始问题

在这里,我正在使用MATLAB 2008a。此细微的错误已在MATLAB-2009a中修复。无论如何,通过定义我的两个类的方式,保存/加载循环导致将一个类(superClass)的变量作为第二个类(propClass)的变量加载。

示例MATLAB(r2008a)会话

>> bb=superClass; >> whos Name Size Bytes Class Attributes bb 1x1 60 superClass >> save >> clear >> clear classes >> load >> whos Name Size Bytes Class Attributes bb 1x1 60 propClass 加载matlab.mat之后,变量bb神秘地从superClass更改为propClass

类:超类

这个类需要包含一个propClass类型的数组,这是朴素的定义

classdef superClass