似乎arrayfun和string()之间存在冲突

时间:2019-06-23 04:43:18

标签: matlab

我希望能够方便地确保结构数组的字段仅包含字符串(而不包含字符数组)。例如,

S(1).f='abc'; S(2).f='asdfa'; S(3).f="aegwer";

如果有的话

setfield(S(1),'f',string(S(1).f))

S(1).f将成功转换为"abc"

但是

arrayfun(@(s)setfield(s,'f',string(s.f)),S)

不仅无法将'f'下的所有字段值都设置为字符串,而且实际上将'f'下的所有字段值都转换为字符数组。

为什么arrayfun使string()成为char()?还是其他?

我正在使用的MATLAB版本:R2018a

1 个答案:

答案 0 :(得分:3)

这里的问题是setfieldarrayfun不会修改原始对象S(即,结构没有类似引用的行为)。他们创建一个新的修改对象并返回它。您必须用此返回值覆盖S才能对其进行更新:

S = arrayfun(@(s) setfield(s, 'f', string(s.f)), S);