我创建了这两个代码类。
classdef master < matlab.mixin.Copyable
properties
id
list
end
methods
function this=master(id)
if nargin > 0
this.id = id;
this.list = repmat(msg,1,20);
end
end
end
end
classdef msg < matlab.mixin.Copyable
properties
id
dest
ttl
end
methods
function this=msg(id,dest,ttl)
if nargin > 0
this.id = id;
this.dest = dest;
this.ttl = ttl;
end
end
end
end
在我的代码的另一部分中,我尝试使用以下内容从数组“master.list”中删除一个或多个objetc“msg”:
function verifyMsgToDiscard(this,t)
i = 1;
while (i <= numel(this.list))
m = this.list(i);
if (t > m.ttl)
this.list = this.list(this.list~=m); %remove m of the list
clear m; %delete m from the system
end
i= i + 1;
end
end
我收到错误:
指数超出矩阵维度。
master / verifyMsgToDiscard出错(第117行) m = this.list(i);
我认为这个问题就是为什么我在master.list上迭代,同时我修改了它上面的元素数量。另外我可以在“列表”中添加和删除新对象“msg”,然后它的大小会有所不同。我怎样才能以动态的方式做到这一点。
答案 0 :(得分:1)
我想您正在尝试删除ttl
小于t
的msg对象。这是删除元素的Matlab方法:
this.list = this.list(t <= [this.list.ttl]);
请注意,t <= [this.list.ttl]
会生成逻辑索引。