How to use property validation functions in class definitions for struct fields?
조회 수: 23 (최근 30일)
이전 댓글 표시
Hi,
I have a class in which I define a struct S. How can I validate that its fields (c1, c2, ...) are numeric? mustBeNumeric or mustBeUnderlyingType(S,"double") throw an error because they checks if S itself is numeric/double.
classdef myClass
properties
a {mustBeText} = ''
b {mustBeNumeric} = 0
S { ? } = struct('c1',0,'c2',0,'c3',0)
end
end
Thanks.
댓글 수: 0
채택된 답변
chicken vector
2024년 4월 12일
편집: chicken vector
2024년 4월 12일
If this is helpful, please remember to vote for best answer.
classdef myClass
properties
a {mustBeText} = ''
b {mustBeNumeric} = 0
S {mustBeStructWith3NumericFields(S)} = struct('c1',0,'c2',0,'c3',0)
end
end
function mustBeStructWith3NumericFields(var)
if ~isstruct(var)
error("Input must be a struct.")
end
fn = fieldnames(var);
Nfn = length(fn);
if Nfn ~= 3
error("Input struct must have 3 fields.")
end
for j = 1 : Nfn
if ~isnumeric(var.(fn{j}))
error("Input struct fields must be numeric.")
end
end
end
You can run the following to test that your validator function performes its task correctly:
a = myClass;
S = struct('a',1,'b',2,'c',3);
a.S = S;
S = ["a" "b" "c"];
try
a.S = S;
catch ME
fprintf(ME.message + "\n");
end
S = struct('a',1,'b',2,'c',3,'d',4);
try
a.S = S;
catch ME
fprintf(ME.message + "\n");
end
S = struct('a',"1",'b',2,'c',3);
try
a.S = S;
catch ME
fprintf(ME.message + "\n");
end
댓글 수: 2
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Structures에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!