我以为如果我写
for x = cell_array
...
end
然后循环将遍历 cell_array
的元素,但在以下情况下它不会:
>> tags
tags =
'dset3'
'dset4'
'cpl1'
>> class(tags)
ans =
cell
>> for t = tags
tmp = t{:} %No semicolon: i.e. print it.
end
tmp =
dset3
所以它只适用于第一个元素。
有什么问题?
根据 the documentation , for x = cell_array
将遍历元胞数组的列。
问题中混淆的原因与 {:}
扩展的行为方式有关:
>> a = {3;4}
a =
[3]
[4]
>> b = a{:}
b =
3
在上面,a{:}
执行类似于输入逗号分隔列表的操作,其中元素是元胞数组 a
的元素。除了不完全是!如果我们明确地编写这样一个列表,我们会得到:
>> c = 3,4
c =
3
ans =
4
不知何故,对于 >> b = a{:}
,a
的其他元素会被静默丢弃,即使例如a = {1 2; 3 4}
.
但是,在其他情况下,a{:}
将扩展为完整的逗号分隔列表:
>> extra_args = {'*-'; 'linewidth'; 30};
>> plot(1:2, extra_args{:})
>> extra_args = {};
>> plot(1:2, extra_args{:})
这将完成其预期的工作。