我正在使用 Matlab 中的结构和对象数组。我想尽快为某个数组的所有成员设置属性。
对于设置某个结构字段的问题,我找到了一个解决方案,涉及使用arrayfun
and setfield
。以下工作就像一个魅力:
myStru.id = 0;
myStru.name = 'blah';
arrayStru = repmat(myStru,10,1); % Array of 10 elements. All of them have id=0
arrayStru = cell2mat( arrayfun( @(x,y)setfield(x,'id',y), arrayStru, (1:10)', 'UniformOutput', false ) ); % ids ranging from 1 to 10 :D
问题是,对于对象,这不起作用。我知道这setfield
是针对结构的,所以我尝试了其他一些替代方案。当我尝试以下操作时,会弹出最令人痛苦的错误:
arrayfun( @(x,y) eval(['x.id=y;']), arrayOfObjects, arrayOfValues, 'UniformOutput', false );
(该类是一个非常简单的类,它接受空构造函数并具有一个名为“id”的真正公共属性)。结果是:
Error using setFieldOfStructArray>@(x,y)eval(['x.id=y;']) (line 17)
Error: The expression to the left of the equals sign is not a valid target for an
assignment.
尽管我在该行中放置了一个断点,但似乎可以以预期的效果执行该表达式。
我的两(三)个问题:
- 为什么上述解决方案会失败?我怎样才能让它工作?
- 我的最终目标是在对象数组中快速简单地设置属性。哪个是最好的技术?
(注意:我可以写循环,但是当我不得不这样做时我总是觉得很痒:P)