MATLAB Answers

Get all allowed values of a class property

31 views (last 30 days)
Alexander Jöhl
Alexander Jöhl on 29 Mar 2021
Commented: Matt J on 29 Mar 2021
I have a class that has a property restricted to certain values (mustbemember several char arrays in this case). I also have an app that contains an object of this class. The app also has a dropdown. Now, I want to populate the dropdown item list with the allowed values of that restricted property. Is it possible to programmatically get a list of all the allowed values of the class?
  2 Comments
Alexander Jöhl
Alexander Jöhl on 29 Mar 2021
Thanks for your comment:
The property looks like this:
prop char {mustBeMember(prop,{'a','b','c'})} = 'a'
The list is hard coded here. I don't know how to extract it from there.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 29 Mar 2021
Edited: Matt J on 29 Mar 2021
Below is a rather gymnastic way of extracting the list (I admit it would be nice if this were unnecessary):
classdef myclass %Example class
properties
prop {mustBeMember(prop,{'a','b','c'})} = 'a'
end
end
m=?myclass;
str = func2str( m.PropertyList.Validation.ValidatorFunctions{1} );
C=extractBetween(str,'{','}','Boundaries','inclusive');
selections=eval(C{1})
selections = 1×3 cell array
{'a'} {'b'} {'c'}
  1 Comment
Alexander Jöhl
Alexander Jöhl on 29 Mar 2021
Thanks for your answer. A minor point I noticed: if you have multiple properties, then you have to index into the PropertyList:
str = func2str( m.PropertyList(1).Validation.ValidatorFunctions{1} );

Sign in to comment.

More Answers (1)

J. Alex Lee
J. Alex Lee on 29 Mar 2021
Edited: J. Alex Lee on 29 Mar 2021
Ah, I should more fully embrace the validator mechanism. Here is a way by defining a custom validator, so in a way less hard-coded by relying on the same mechanism.
classdef myclass %Example class
properties (Constant)
AllowedPropVals = {'a','b','c'}
end
properties
prop {myclass.propValidator(prop)} = 'a'
propstat {mustBeMember(propstat,{'a','b','c'})} = 'a'
end
methods (Static , Access = private)
function propValidator(prop)
mustBeMember(prop,myclass.AllowedPropVals)
end
end
end
Then your app can simply access the constant property myclass.AllowedPropVals
  3 Comments
Matt J
Matt J on 29 Mar 2021
Funny that you can't just do,
properties
propstat {mustBeMember(propstat,myclass.AllowedPropVals)} = 'a'
end

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by