MATLAB cellarray没有引用?

时间:2016-10-16 21:04:55

标签: arrays matlab reference

我有许多带语义标识符的向量(例如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相同的对象。

我如何实现目标? (我不能将我的矢量放入矩阵中,因为矢量的长度不同。)

1 个答案:

答案 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的值,但无法分配。