Подтвердить что ты не робот

Итерирование пустой матрицы с использованием цикла for

Я всегда предполагал, что итерация пустого вектора с использованием цикла for была такой же, как отсутствие петли вообще. Однако я наткнулся на это странное поведение:

for t = []          %// Iterate an empty 0x0 matrix
    1
end
for t = ones(1, 0)  %// Iterate an empty 1x0 matrix
    2
end
for t = ones(0, 1)  %// Iterate an empty 0x1 matrix
    3
end

Результат:

ans =
    3

Есть ли смысл, или это ошибка?

4b9b3361

Ответ 1

Цикл for выполняется по всем столбцам его ввода. Поскольку матрица 0x1 имеет один (пустой) столбец, цикл будет просто переходить к этому. Никакое исключение не упоминается для пустых матриц, поэтому здесь t будет просто пустой матрицей, как видно из:

for t = ones(0, 1) %// Iterate over an empty 0x1 matrix
    size(t) % t is a 0x1 matrix
end

Это ошибка? Наверное, нет.
Имеет ли это смысл? Ну, я думаю, я предпочел бы, чтобы цикл не выполнялся, если вход пуст, но, вероятно, есть и преимущества.

По крайней мере, это определенно нужно быть в курсе!