24

ループを使用して空のベクトルを反復すること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

それは理にかなっていますか、それともこれはバグですか?

4

1 に答える 1

22

forループは、その入力のすべての列に対して実行されます。0x1 行列には 1 つの (空の) 列があるため、ループは単純にそれを超えます。空行列については例外はありませんt

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

バグですか?おそらくそうではありません。
それは理にかなっていますか?入力が空の場合はループを実行しない方がよいと思いますが、おそらくこれにも利点があります。

少なくともそれは間違いなく注意すべきことです!

于 2013-07-30T15:16:29.520 に答える