Matlab - 用于循环遍历单元格数组"foreach"的语法仅在第一个元素上循环

Evg*_*eev 2 syntax matlab loops for-loop cell-array

我想如果我写的话

for x = cell_array
    ...
end
Run Code Online (Sandbox Code Playgroud)

然后循环将遍历元素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
Run Code Online (Sandbox Code Playgroud)

所以它只适用于第一个元素.

有什么问题?

Evg*_*eev 9

根据文档,for x = cell_array将迭代单元格数组的.

问题混淆的原因是{:}扩展行为如何:

>> a = {3;4}

a = 

    [3]
    [4]

>> b = a{:}

b =

     3
Run Code Online (Sandbox Code Playgroud)

在上面,a{:}做了类似于以逗号分隔的列表键入的内容,其中元素是单元格数组的元素a.除了不完全!如果我们明确地编写这样的列表,我们得到:

>> c = 3,4

c =

     3


ans =

     4
Run Code Online (Sandbox Code Playgroud)

不知何故,随着>> 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{:})
Run Code Online (Sandbox Code Playgroud)

这将做它想要做的事情.