我试图在 Octave 中返回一个带字符串的过滤后的 cellarray,但我得到了一种我不理解的行为。
过滤几个行索引似乎有效,但是当它被分配给一个变量并由函数返回时它不起作用。
我不知道这种行为是否也发生在 Matlab 中。
为什么会这样?
function result = testcellarray()
mycell = {'foo1' 'foo2' 'foo3'; 'barbar1' 'barbar2' 'barbar3'; 'yuzz1' 'yuzz2' 'yuzz3'};
idx = [1; 3];
% WANT TO RETURN THIS
mycell{[1:3], 2}
% BUT RESULT GETS SOMETHING DIFFERENT
result = mycell{[1:3], 2}
end
octave:221> testcellarray()
ans = foo2
ans = barbar2
ans = yuzz2
result = foo2
ans = foo2
mycell{[1:3], 2}
返回三个值的逗号分隔列表。你可以看出,因为 Octave 在函数返回之前显示了三次ans =
。
那么赋值基本等于
result = 'foo2', 'barbar2', 'yuzz2'
逗号可以分隔MATLAB语言中的语句,所以这一行有三个语句,只有第一条是赋值。
如果要返回元胞数组的子集,使用圆括号(圆括号)进行索引:
result = mycell([1:3], 2)
您还可以捕获大括号内的逗号分隔列表,以形成包含三个值的新元胞数组。这将是一个 1x3 元胞数组,而不是我们上面返回的 3x1 数组:
result = {mycell{[1:3], 2}}