Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 尝试在MATLAB UI中实现保存/加载对象功能的过程陷入困境

我正在尝试在MATLAB(R2009a)UI中实现保存/加载功能。我的对象实现了一个布局功能,该功能为该对象生成一个用户界面。我正在尝试实现保存/加载按钮的回调。保存按钮将起作用,并将对象保存到MAT文件中,以便以后加载。

我的问题是实现加载按钮的回调。我似乎无法从MAT文件中加载数据并更新新对象的属性。非常感谢任何关于我哪里出问题的建议以及关于我可能如何进行的建议。

重要的代码是我的类定义文件,当然我的实际对象实现了更多的属性和方法,但这是我所拥有内容的框架

classdef myObj> var = myObj; >> var.load_object; 但是,如果我以这种方式使用LayoutFcn.m中定义的loadingMyObject回调

>> var = myObjl >> var.LayoutFcn -> click Load button to call _loadingMyObject_ 不会影响var属性。在单击“加载”按钮后, var将仍然具有其默认属性值。
  1. 根据gnovice的建议将加载方法更改为使用set会引发以下错误
    ???使用==>将FujiCalibration的Conversion设置为double时出错。

    即使我为每个属性设置/获取方法;如

    method set.image(self,II) % ... some data validation code ... self.image = II end
  2. 按照Fooz先生的建议,使用循环来设置每个字段并不是真正的选择,因为我的整个类都有公共常量,设置它们时会抛出错误。
我正在寻找一种解决方案,可以避免我不得不手动设置每个字段的代码。尽管目前看来这是唯一的可能性。


回答:
我相信福兹先生是对的。传递给load_object的self变量是类型为“ myObj”的对象,但该行如下:

self = tmp.obj; 只是用存储在tmp.obj中的结构覆盖了self变量。正在做:

self.image = tmp.obj.image; 相反,应该为对象self的image属性调用set运算符。在MATLAB文档中,有一个示例类定义,其中包含一个名为“ set.OfficeNumber”的方法来说明这一点。

另外,函数savingMyObject中的以下行可能是不必要的:

obj = self; 我认为,如果在类代码中使用名称“ obj”代替“自我”一词,这可能是最有意义的(并使代码更清晰一些)(因为文档倾向于这样做)。在MATLAB中,“ self”似乎不是任何特殊的关键字(就像其他语言一样)。据我所知,这只是另一个变量。 =)

编辑#1:

如果看起来不必在load_object方法中分别设置每个属性的感觉听起来很有趣,那么一种解决方法是,您可以为对象设置一个SET方法,该对象的设计类似于用于处理图形SET方法 。该SET命令可以接受结构输入,其中每个字段名称是属性名称,每个字段值是该属性的新值。然后,您将收到一个像这样的电话:

set(self,tmp.obj); 相当短,尤其是在您要设置许多属性的情况下。当然,您必须为对象编写新的SET方法,但是如果缩短的语法在其他地方也很方便,则可能值得进行额外的工作。 =)

编辑#2:

您可能可以将Fooz先生建议的循环与try / catch块结合使用:

fn = fieldnames(tmp.obj); for i = 1:numel(fn), try self.(fn{i}) = tmp.obj.(fn{i}); catch % Throw a warning here, or potentially just do nothing. end end

更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:49


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.