validate arguments stop implicit expansion
    조회 수: 3 (최근 30일)
  
       이전 댓글 표시
    
classdef Car
    properties
        id
        position
    end
    methods
        function obj = Car(id, position)
            arguments
                id (1,1) {mustBeNumeric, mustBePositive, mustBeInteger, mustBeNonempty}
                position (1,3) double {mustBeVector, mustBeNonempty}         
            end
            obj.id = id;
            obj.position = position;
        end
    end
end
myCar = Car(42, 20)
Instantiation of myCar creates position vector [20, 20, 20]. This is because of implicity expansion. I am trying to stop this by adding a custom validator, but having trouble. 
댓글 수: 0
답변 (1개)
  Bhanu Prakash
      
 2024년 7월 13일
        Hi Nilay,
If I understand it correctly, you want to ensure that the 'position' argument passed is a vector and thereby avoid implicit expansion.
For this use case, you can simply use a custom function (validatePositionArgument, in this case) to verify that the argument 'position' is a vector. If it's not, then the code throws an error. Here is the modified code:
classdef Car
    properties
        id
        position
    end
    methods
        function obj = Car(id, position)
            validateattributes(id, {'numeric'}, {'scalar', 'positive', 'integer', 'nonempty'}); % validate 'id'            
            validatePositionArgument(position); % custom function to validate position
            obj.id = id;
            obj.position = position;
        end
    end
end
function validatePositionArgument(position)
    % Throws an error if the input 'position' is not a vector or if it's
    % length is not equal to 3.
    if ~isvector(position) || length(position) ~= 3
        error('Position must be a 1x3 vector.');
    end
end
Instantiation of myCar with the 'position' argument as a vector:
>> myCar = Car(42, [10, 15, 20])
myCar = 
  Car with properties:
          id: 42
    position: [10 15 20]
If the 'position' argument is not a vector or if its size is not equal to 3:
>> myCar = Car(42, 20)
Error using Car>validatePositionArgument (line 21)
Position must be a 1x3 vector.
Error in Car (line 9)
            validatePositionArgument(position); % custom function to validate position
For more information on the 'validateattributes' function, you can refer to the following documentation:
I hope this helps!
참고 항목
카테고리
				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!