validate arguments stop implicit expansion
4 次查看(过去 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!