validate arguments stop implicit expansion
4 views (last 30 days)
Show older comments
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 Comments
Answers (1)
Bhanu Prakash
on 13 Jul 2024
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!
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!