Итерирование пустой матрицы с использованием цикла 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
Есть ли смысл, или это ошибка?
Ответы
Ответ 1
Цикл for
выполняется по всем столбцам его ввода. Поскольку матрица 0x1 имеет один (пустой) столбец, цикл будет просто переходить к этому. Никакое исключение не упоминается для пустых матриц, поэтому здесь t
будет просто пустой матрицей, как видно из:
for t = ones(0, 1) %// Iterate over an empty 0x1 matrix
size(t) % t is a 0x1 matrix
end
Это ошибка? Наверное, нет.
Имеет ли это смысл? Ну, я думаю, я предпочел бы, чтобы цикл не выполнялся, если вход пуст, но, вероятно, есть и преимущества.
По крайней мере, это определенно нужно быть в курсе!