7

I have a class like so:

classdef Vehicle < handle
    %Vehicle
    %   Vehicle superclass

    properties
        Is_Active  % Does the vehicle exist in the simualtion world?
        Speed      % [Km/Hour]
    end

    methods
        function this = Vehicle(varargin)
            this.Speed = varargin{1}; % The speed of the car
            this.Is_Active = true;
        end
    end
end

I create my Vehicle-class objects in a cell form (don't ask me why - it's a laymen's workaround for global setting):

Vehicles{1} = Vehicle(100);
Vehicles{2} = Vehicle(200);
Vehicles{3} = Vehicle(50);
Vehicles{1}.Is_Active = true;
Vehicles{2}.Is_Active = true;
Vehicles{3}.Is_Active = true;

My questions: 1. Is there a way to set all three objects' active in a single command? 2. Is there a way to get all three objects' Speed in a single command? 3. Is there a way to query which vehicles are faster than X in a single command?

Thanks Gabriel

1 Answer 1

8

For the members of the same class you can use round brackets (regular array):

Vehicles(1) = Vehicle(100);
Vehicles(2) = Vehicle(200);
Vehicles(3) = Vehicle(50);

To set all objects use deal:

[Vehicles(:).Is_Active] = deal( true );

You could also initialize an array of objects in the first place.

For your questions (2) and (3) the syntax is equivalent to those of MATLAB structures:

speedArray = [Vehicles.Speed];
fasterThanX = Vehicles( speedArray > X );

Such vectorization notation is a strong point of MATLAB and is used extensively.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.