【发布时间】:2018-07-09 22:38:29
【问题描述】:
我有一个派生自 matlab.mixin.Copyable 的类。一些属性有set 方法。我希望这些属性的设置也更新其他属性,以便参数之间的关系保持一致(set 方法的经典用法)。
不幸的是,当我load 一个*.mat 文件[特别是使用,比如x=load('file.mat')] 时,也使用了setter。不需要对多个参数进行那种自动更新,因为所有对象的属性都可以从 *.mat 文件中复制,并且自动保持自一致性。相反,在load 期间使用setter 会导致错误,因为setter 使用尚未在load 进程中分配的其他属性。我从load 期间发生的错误以及检查设置器所需的属性中看到了这一点。
有什么方法可以强制load 对包含*.mat 文件的属性值进行简单复制? 一些属性本身就是复杂的对象,所以需要一个load 期间按值递归复制。由于上述原因,在load 期间使用设置器似乎相当不合适。
附:我在上面说过,setter 使用了另一个尚未分配的属性。我们将此属性称为p2。它还由第三个属性s1 的设置器分配给它。这看起来很奇怪,但s1 确实 有一个值,而p2 没有。一个可能的原因是p2 依赖于除s1 之外的其他属性,并且在加载s1 时(即调用s1 设置器时)可能没有分配这些属性。整个问题源于load 发生在上下文之外以及在执行创建它的代码期间分配属性的顺序。这就是(在我看来)load 应该不使用 setter 的关键原因。否则,它似乎与复制或加载都不兼容(我目前不确定哪个 - 可能两者兼而有之)。
【问题讨论】: