Matlab объектно-ориентированное программирование: установка и получение свойств для нескольких объектов - PullRequest
7 голосов
/ 24 апреля 2011

У меня есть такой класс:

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

Я создаю свои объекты класса Vehicle в форме ячейки (не спрашивайте меня, почему - это обходной путь для неспециалистов для глобальной настройки):

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;

Мои вопросы: 1. Есть ли способ установить все три объекта активными в одной команде?2. Есть ли способ получить скорость всех трех объектов в одной команде?3. Есть ли способ запросить, какие машины быстрее, чем X, в одной команде?

Спасибо, Габриэль

1 Ответ

8 голосов
/ 24 апреля 2011

Для членов одного класса вы можете использовать круглые скобки (обычный массив):

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

Чтобы установить все объекты, используйте deal:

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

Вы также можете инициализировать массив объектов .

Для ваших вопросов (2) и (3) синтаксис эквивалентен синтаксису структур MATLAB:

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

Такая нотация векторизации является сильной точкой в MATLAB и широко используется.

...