argument suggestion with shared argument validator
    6 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
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 Kommentare
Antworten (2)
  Sugandhi
    
 am 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.`.
Siehe auch
Kategorien
				Mehr zu Argument Definitions 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!

