我有许多带语义标识符的向量(例如inputs = [...]
)。我想将它们放入一个单元格数组中,这样我就可以迭代它们。但是当我尝试:
inputs(1).myfield = 2 % some arbitrary value
mycellarray{1} = inputs
inputs(1).myfield = 3 % some arbitrary value
assert(mycellarray{1}(1).myfield == inputs(1).myfield)
% => FAIL
单元格数组表示{1}
包含1x5 MyObject array
,但显然它不会引用与inputs
相同的对象。
我如何实现目标? (我不能将我的矢量放入矩阵中,因为矢量的长度不同。)
答案 0 :(得分:0)
正如在值传递的Matlab对象中所注释的那样。但是下面的技巧可以在GNU Octave中完成(在Matlab中我不确定):
ref = @(name) @(index) evalin('caller',sprintf('%s(%d)',name,index));
inputs(1).myfield = 2;
mycellarray{1} = ref('inputs');
inputs(1).myfield = 3;
assert(mycellarray{1}(1).myfield == inputs(1).myfield)
ref
是一个函数,它获取name
并返回一个函数句柄,该句柄获得index
并评估表达式name(index)
所以当我们写mycellarray{1} = ref('inputs');
时,我们在cellarray中存储一个函数句柄。
然后当我们写mycellarray{1}
函数句柄@(index) evalin('caller',sprintf('%s(%d)',name,index))
时返回。
当我们写mycellarray{1}(1)
时,将评估表达式inputs(1)
并返回其结果。
当我们写mycellarray{1}(1).myfield
字段myfield
时返回(不在Matlab中工作)
注意:使用上述方法,只能检索myfield
的值,但无法分配。