阻止访问saveobj时垫文件是有效的

1视图(30天)
罗伊
罗伊 2022年3月11日
编辑: 罗伊2022年3月11日
这是一个。为了能够保存一个深对象与类本身属性(类),递归地我保存所有属性到一个结构体,并添加一个新的字段结构代表深对象和他们的名字(“名字”)。后来在加载类的时候,我可以重建这些对象和覆盖它们的属性。
问题是,我有一个属性(依赖,但是不需要),检查是否存在一个垫子文件。当saveobj()方法遍历属性,它的值属性,试图加载垫文件,只是被保存。我可以开始“黑名单”属性不是查询列表而储蓄,但这意味着硬编码属性名称,不是很优雅。有办法告诉如果一个saveobj()当前正在运行,或者其他一些优雅的方式写这个吗?
这里有一个最小的示例代码:
classdefwhilesaving
属性(瞬态依赖)
itexists
结束
方法
函数saveme (obj)
保存(“垫”,“obj”);
结束
函数tf = get.itexists (obj)
垫= matfile (“垫”);
tf = isfield(垫,“obj”);
结束
函数s = saveobj (obj)
s = obj2struct (obj);
% %
函数s = obj2struct (obj)
如果~ (“年代”,“var”),s =结构();结束
mobj =元类(obj);%不能使用”findprop()”值类
道具= {mobj.PropertyList.Name};
n = 1:元素个数(道具)
p =道具{n};
%添加这个改正:如果mobj.PropertyList (n)。瞬态,继续;结束
v = obj。(p);
如果~ isobject (v) | | isenum (v)
年代。(p) = v;
其他的
sn = obj2struct (v);
sn。CLASSNAME =类(v);
年代。(p) = sn;
结束
结束
结束
结束
结束
结束
运行:
.saveme whilesaving ()
和你将获得:
警告:当储蓄一个类的对象“whilesaving”:
不能阅读MAT-file mat.mat:不是一个二进制MAT-file。
> whilesaving / saveme(第8行)
警告:当储蓄一个类的对象“whilesaving”:
不能阅读MAT-file mat.mat:不是一个二进制MAT-file。
> whilesaving / saveme(第8行)
更新:好吧,就这个问题后,我得到了这个想法使财产“瞬时”然后在obj2struct忽略它,看到代码中的注释行。但因为我已经发布:任何suggetsions清洁实现?:)

答案(0)

类别

找到更多的在对象保存和加载帮助中心文件交换

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!