Arrays MATLAB:矩阵索引超出删除范围
我有这个函数,其中我使用数组作为FIFO队列(即,将元素放入其中,并使用先进先出的方法处理它们)。特别是,我将此数组称为MsgQueue,因为它包含消息 MsgQueue在发送新消息(事件)时使用,该事件触发handlemsgssent()方法的执行,我将在下面展示该方法Arrays MATLAB:矩阵索引超出删除范围,arrays,matlab,fifo,Arrays,Matlab,Fifo,我有这个函数,其中我使用数组作为FIFO队列(即,将元素放入其中,并使用先进先出的方法处理它们)。特别是,我将此数组称为MsgQueue,因为它包含消息 MsgQueue在发送新消息(事件)时使用,该事件触发handlemsgssent()方法的执行,我将在下面展示该方法 function handleMsgSent(this, msg) this.MsgQueue = [this.MsgQueue msg]; while(numel(this.MsgQueu
function handleMsgSent(this, msg)
this.MsgQueue = [this.MsgQueue msg];
while(numel(this.MsgQueue) > 0)
m = this.MsgQueue(1);
this.MsgQueue = this.MsgQueue(2:end); % <----- OPTION A
% DO WHATEVER WITH THE MESSAGE
%this.MsgQueue(1) = []; % <------ OPTION B
end
end
函数handlemsgssent(this,msg)
this.MsgQueue=[this.MsgQueue msg];
while(numel(this.MsgQueue)>0)
m=这个.MsgQueue(1);
this.MsgQueue=this.MsgQueue(2:结束);% 对于空数组,end
为0
。如果检查文档中的冒号运算符,则对于“开始”>“结束”,它将返回一个空数组。因此,在某些情况下,第一个选项删除noting,而第二个选项总是为第二个元素编制索引。调试完代码后,我似乎意识到了原因。在我的代码中有一条注释:
% DO WHATEVER WITH THE MESSAGE
问题是,此时我正在调用另一个方法,该方法触发要发送的新消息,从而再次进入handlemsgssent()方法。因此,当我在之前修改MsgQueue时,我没有问题,但当我在之后修改MsgQueue时,我会遇到麻烦。我不知道我是否理解正确,但关键是如果我进入while循环,那是因为MsgQueue至少有1个元素。我应该可以删除数组的第一个元素,对吗?