argument suggestion with shared argument validator
    조회 수: 4 (최근 30일)
  
       이전 댓글 표시
    
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
답변 (2개)
  Sugandhi
    
 2023년 6월 9일
        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.`.
참고 항목
카테고리
				Help Center 및 File Exchange에서 Argument Definitions에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




