假设我有一个动态构建的结构(比如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函数中利用它,但它完全不受支持,并且可能导致意外行为。