Matlab calsses - PreGet listener on structures
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello,
I am using some basic Matlab classes with some dynamic defined properties. I added listeners 'PreGet' and 'PostGet' for a property. My property can be a simple variable or a structure.
This is my class:
classdef myClass < dynamicprops
methods
function obj = myClass()
NewProp = 'myProp';
DynamicProp=addprop(obj,NewProp);
DynamicProp.SetAccess='public';
DynamicProp.GetAccess='public';
DynamicProp.SetObservable=true;
DynamicProp.GetObservable=true;
addlistener(obj , NewProp , 'PreGet' , @obj.PreReadProperty);
%addlistener(obj , NewProp , 'PreSet' , @obj.PreSendProperty);
addlistener(obj , NewProp , 'PostGet' , @obj.PostReadProperty);
%addlistener(obj , NewProp , 'PostSet' , @obj.PostSendProperty);
end
function PreReadProperty(obj, inputMetaProp, varargin)
DynamicProp=obj.findprop((inputMetaProp.Name));
disp(obj.(DynamicProp.Name))
%Body
end
%
function PostReadProperty(obj, inputMetaProp, varargin)
%DynamicProp=obj.findprop(inputMetaProp.Name);
% Body
end
end
end
I am trying to catch in a PreReadProperty the value that I access before displaying it.
Example:
>> myVar = myClass;
myVar.myProp = 1;
mytest = myVar.myProp;
1
>> mytest
mytest =
1
This works fine for a variable. I can catch it and work with it
I am trying to do the same thing when myVar.myProp is a structure:
>> myVar = myClass;
>> myVar.myProp.myProp1 = 1;
>> myVar.myProp.myProp2 = 2;
myProp1: 1
>> mytest = myVar.myProp.myProp1;
myProp1: 1
myProp2: 2
>> mytest
mytest =
1
This doesn't work as expected. I tried to browse inputMetaPropand varargin but I still cant get my read value in the PreReadProperty function
When I read myVar.myProp.myProp1 I want to catch its value in PreReadProperty. Is there any way to do this?
Regards
0 Kommentare
Antworten (1)
Adam
am 3 Dez. 2015
You would need something more like:
addlistener(obj.NewProp, 'myProp1', 'PreGet' , @obj.PreReadProperty);
to listen to the actual property that is being set rather than the structure property that contains it. But in your situation that doesn't make sense since you are dealing with a dynamic property and your class does not know about the existence of 'myProp1'.
If you can move away from dynamic properties to static properties then you could do this, but otherwise what you are effectively trying to do is have your class listen for a change to a property it doesn't even know exists.
Siehe auch
Kategorien
Mehr zu Whos finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!