У меня есть эта функция, где я использую массив как очередь FIFO (т. Е. Помещаю в него элементы и обрабатываю их с использованием первого в первом порядке). В частности, я называю этот массив MsgQueue, поскольку он содержит сообщения.MATLAB: Индекс Матрицы за пределами допустимого диапазона для удаления
MsgQueue используется, когда новый тзд отправляется (событие), который инициирует выполнение handleMsgSent() метода, который я показать следующим
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
Как вы можете видеть, я ознаменовал код с ВАРИАНТ A и ВАРИАНТ B комментарий. Таким образом, точкой является вариант B, заканчивается ошибка «Матричный индекс за пределами диапазона для удаления», а опция A работает (по-видимому) совершенно нормально, без ошибок.
Может ли кто-нибудь помочь мне разобраться в различии? Ну, я понимаю, что опция A не удаляет ничего, кроме просто «отбрасывания» первого элемента массива, но почему опция B не удается удалить, если есть хотя бы один элемент в MsgQueue?
Я не знаю, правильно ли я понял, но дело в том, что если я вхожу в цикл while, это потому, что MsgQueue имеет как минимум 1 элемент. Итак, я должен удалить первый элемент массива, верно? – rutex