Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB:矩阵索引超出删除范围_Arrays_Matlab_Fifo - Fatal编程技术网

Arrays MATLAB:矩阵索引超出删除范围

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

我有这个函数,其中我使用数组作为FIFO队列(即,将元素放入其中,并使用先进先出的方法处理它们)。特别是,我将此数组称为MsgQueue,因为它包含消息

MsgQueue在发送新消息(事件)时使用,该事件触发handlemsgssent()方法的执行,我将在下面展示该方法

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个元素。我应该可以删除数组的第一个元素,对吗?