argument suggestion with shared argument validator
3 views (last 30 days)
Show older comments
Hello matlab community.
I am facing a problem with function argument validation and auto-completion. I have a set of static methods which share the same argument validation. In the following example, the input argument must belong to ["a", "b"].
I cannot find a way to have a common definition of this vector membership without losing auto completion:
classdef dummyClass
properties (Constant)
m = ["a", "b"];
end
methods (Static)
% this method works but membership vector is hardcoded
function s = fun1(a)
arguments
a {mustBeMember(a,["a", "b"])} = "a"
end
s = a;
end
% using a third party validator does not trigger auto completion
function s = fun2(a)
arguments
a {mustBeAorB(a)} = "a"
end
s = a;
end
% yield an error as dummyClass.m is not defined
function s = fun3(a)
arguments
a {mustBeMember(a,dummyClass.m)} = "a"
end
s = a;
end
function mustBeAorB(a)
arguments
a {mustBeMember(a,["a", "b"])} = "a"
end
end
end
end
Do you have any suggestion ?
0 Comments
Answers (2)
Sugandhi
on 9 Jun 2023
Hi,
I understand that you are facing a problem with function argument validation and auto-completion.
The possible work around could be, to define the valid membership vector as a class constant instead of a property constant. This way, you can reference the vector using the class name in instances where the auto-completion is lost.
Here's an updated version of your code that implements this approach:
classdef dummyClass
methods (Static)
% Define valid membership vector as a class constant
function m = validMembership()
m = ["a", "b"];
end
% Use validMembership class constant to validate input argument in the mustBeMember constraint
function s = fun3(a)
arguments
a {mustBeMember(a,dummyClass.validMembership())} = "a"
end
s = a;
end
end
end
In the code above, the valid membership vector is now defined as a class constant within a static function called 'validMembership'. 'The mustBeMember' constraint used in `fun3` references this class constant by calling `dummyClass.validMembership()`.
This approach provides a common definition for the valid membership vector without hard coding the values or relying on a third-party validator. It also retains auto-completion in the function when typing `dummyClass.`.
See Also
Categories
Find more on Argument Definitions in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!