【发布时间】:2014-12-04 20:33:36
【问题描述】:
我遇到了与 PostSet 侦听器结合使用的类状态不一致的问题。
classdef myClass < handle
properties (SetObservable,GetAccess = public, SetAccess = public )
propA;
propB;
end
methods
function myClass = myClass()
myClass.propA = zeros(2);
myClass.propB = zeros(2);
addlistener(myClass,{'propA','propB'},'PostSet',@myClass.propChange);
end
end
methods
function setSize(myClass, size)
myClass.propA = zeros(size);
myClass.propB = zeros(size);
end
function propChange(obj,eventData, metaProp)
disp(obj.propA - obj.propB)
end
end
end
主要功能是:
m = myClass();
m.setSize([1,2])
propA 和 propB 上的侦听器函数需要两个属性大小相同。不幸的是,setSize 会造成短暂的不一致。
解决方法:
- 有没有办法同时设置 propA 和 propB 以便稍后执行 PostSet?
- 我可以使用一致性标志作为另一个属性。但是如何延迟监听器的执行呢?
- 我可以定义自己的通知,但使用预定义的函数一切都很好。
【问题讨论】:
-
只听
propB怎么样? -
@chappjc:在这个例子中看起来可行,但是 propA 和 propB 都可以单独更改,因此我需要两个监听器。
-
您需要将第三个标志存储为私有属性,以暂时禁用 postChange 中的比较。您可以在两个分配之间的 setSize 中设置它。
-
@Navan:这就是我上面所说的“一致性标志”。这应该可行,但我希望尽可能避免它。
标签: matlab matlab-class