Is there a built-in function to validate a class property that should be a cell array?
17 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Bill Tubbs
am 4 Jun. 2022
Bearbeitet: Bill Tubbs
am 6 Jun. 2022
I'm new to classes and learning about how to define properties and validate their values.
I have a class with a property A that is a cell array of doubles (possibly matrices). For example:
A =
1×2 cell array
{[0.7000]} {[0.9000]}
classdef MKFObserver < matlab.mixin.Copyable
properties (SetAccess = immutable)
Ts {mustBeNumeric}
n {mustBeInteger}
%...etc
end
properties
A % how to validate this?
B
C
D
P {mustBeNumeric}
Q {mustBeNumeric}
R {mustBeNumeric}
%...etc
end
Can I use a built in function like {mustBeNumeric} or do I need to write my own validation function?
3 Kommentare
per isakson
am 4 Jun. 2022
Something like this
A (1,2) {mustBeUnderlyingType(A,'cell')}
Not tested
Akzeptierte Antwort
Edric Ellis
am 6 Jun. 2022
Rather than a validator, you could perhaps just use the class specification? (In my code below I'm using a function with an arguments block, but the syntax is exactly the same as a properties block in a classdef). Note that this will accept anything that can be converted to a cell, if you care about distributed arrays, then you should use the approach suggested by @Sean de Wolski.
myFcn({1,2}); % works
myFcn([1,2]); % fails
function myFcn(in)
arguments
in (1,2) cell
end
% do stuff
end
1 Kommentar
Weitere Antworten (2)
Sean de Wolski
am 5 Jun. 2022
Bearbeitet: Sean de Wolski
am 5 Jun. 2022
I think you'll have to write your own. Must be underlying type is for distributed, gpuArrays and others that masquerade as the underlying type.
mustBeUnderlyingType({pi},'double')
You could probably get away with this as your validator: cellfun(@(x)mustBeA(x, 'double'),PropertyName)
c = {pi,magic(3)}
d = {pi, "hello"}
cellfun(@(x)mustBeA(x, 'double'),c)
cellfun(@(x)mustBeA(x, 'double'),d)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Construct and Work with Object Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!