是否可以在Matlab中通过引用解析struct?

时间:2014-02-01 14:56:09

标签: matlab struct pass-by-reference

假设我有一个动态构建的结构(例如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

1 个答案:

答案 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函数中利用它,但它完全不受支持并且可能引起意外行为。