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

最佳答案

对于基本数据类型,不可以。您可以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的“pass-by-value”实际上是内部的“pass-by-reference with copy-on-write”,因此可以从MEX函数中利用它,但它完全不受支持,并且可能导致意外行为。

07-26 07:43