我有一个类似的课程:
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快?
由于 加布里埃尔
答案 0 :(得分:8)
对于同一类的成员,您可以使用圆括号(常规数组):
Vehicles(1) = Vehicle(100);
Vehicles(2) = Vehicle(200);
Vehicles(3) = Vehicle(50);
要设置所有对象,请使用deal
:
[Vehicles(:).Is_Active] = deal( true );
您首先也可以initialize an array of objects。
对于你的问题(2)和(3),语法与MATLAB结构的语法相同:
speedArray = [Vehicles.Speed];
fasterThanX = Vehicles( speedArray > X );
这种矢量化符号是strong point of MATLAB并且被广泛使用。