Matlab类:不一致状态和';PostSet';属性侦听器
我遇到了一个问题,即类状态与PostSet侦听器的组合不一致Matlab类:不一致状态和';PostSet';属性侦听器,matlab,matlab-class,Matlab,Matlab Class,我遇到了一个问题,即类状态与PostSet侦听器的组合不一致 classdef myClass < handle properties (SetObservable,GetAccess = public, SetAccess = public ) propA; propB; end methods function myClass = myClass() myClass.propA = ze
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
propA和propB上的侦听器函数需要两个属性的大小相同。不幸的是,setSize造成了短暂的不一致
解决方法:
- 有没有一种方法可以同时设置propA和propB,以便后期执行PostSet
- 我可以使用一致性标志作为另一个属性。但是如何延迟侦听器的执行呢
- 我可以定义自己的通知,但是使用预定义的函数,一切都很好
classdef myClass
只监听propB
怎么样?@chappjc:在本例中,这看起来是可能的,但是propA和propB都可以单独更改,因此我需要两个侦听器。您需要存储为私有属性的第三个标志来临时禁用更改后的比较。您可以在两个赋值之间的setSize中设置它。@Navan:这就是我上面所说的“一致性标志”。这应该行得通,但如果可能的话我喜欢避免。
m = myClass();
m.setSize([1,2])
classdef myClass < handle
properties(Access=private)
mPropA;
mPropB;
end
properties(Dependent)
PropA;
PropB;
end
methods
function this = myClass()
this.mPropA = zeros(2);
this.mPropB = zeros(2);
addlistener(this, 'ChangedPropA', @this.propChange);
addlistener(this, 'ChangedPropB', @this.propChange);
end
function setSize(this, sz)
this.mPropA = zeros(sz);
this.mPropB = zeros(sz);
notify(this, 'ChangedPropA');
notify(this, 'ChangedPropB');
end
function val = get.PropA(this)
val = this.mPropA;
end
function set.PropA(this,val)
this.mPropA = val;
notify(this, 'ChangedPropA');
end
function val = get.PropB(this)
val = this.mPropB;
end
function set.PropB(this,val)
this.mPropB = val;
notify(this, 'ChangedPropB');
end
end
methods(Access=private)
function propChange(this, src, evt)
disp(src.PropA - src.PropB);
end
end
events
ChangedPropA;
ChangedPropB;
end
end