假设我有一个动态构建的结构(例如data.(casenames{c}).t25s
)。快速动态地访问它会使得代码非常混乱且难以阅读,并且需要大量重复(例如plot(data.(casenames{c}).t14s.x,data.(casenames{c}).t14s.y);
)。
所以我的问题是:
我可以通过引用另一个变量来传递结构吗?
如下所示:
for cno = 1:length(casenames)
data.(casenames{c}) = struct;
... % do some file reading and fill in .x and .y
end
for cno = 1:length(casenames)
case = @data.(casenames{c}); % Naïve parse by ref
case.z = case.x + case.y
end
然后,应该为data.(casenames{c}).z
分配值data.(casenames{c}).x + data.(casenames{c}).y
答案 0 :(得分:3)
对于基本数据类型,没有。你可以get handles to objects,所以如果你的结构和数据方法足够复杂,那么值得深思。否则,通常可以简单地重构代码:
for cno = 1:length(casenames)
data.(casenames{c}) = struct;
... % do some file reading and fill in .x and .y
end
for cno = 1:length(casenames)
% read-modify-write idiom
data.(casenames{c}) = dosomething(data.(casenames{c}));
end
function case = dosomething(case)
case.z = case.x + case.y;
end
旁注:由于Matlab的“按值传递”实际上是“通过引用时通过引用传递”,所以可能从MEX函数中利用它,但它完全不受支持并且可能引起意外行为。