是否可以在 Matlab 中通过引用来解析结构?
Posted
技术标签:
【中文标题】是否可以在 Matlab 中通过引用来解析结构?【英文标题】:Is it possible to parse struct by reference in Matlab? 【发布时间】:2014-02-25 07:09:29 【问题描述】:假设我有一个动态构建的结构(例如data.(casenamesc).t25s
)。快速动态地访问它会使代码变得非常混乱且难以阅读,并带有大量重复(例如plot(data.(casenamesc).t14s.x,data.(casenamesc).t14s.y);
)。
所以我的问题是:
我可以通过引用另一个变量来传递结构吗?
类似于以下内容:
for cno = 1:length(casenames)
data.(casenamesc) = struct;
... % do some file reading and fill in .x and .y
end
for cno = 1:length(casenames)
case = @data.(casenamesc); % Naïve parse by ref
case.z = case.x + case.y
end
这应该会导致data.(casenamesc).z
被分配data.(casenamesc).x + data.(casenamesc).y
的值
【问题讨论】:
【参考方案1】:对于基本数据类型,没有。你可以get handles to objects,所以如果你的结构和数据方法足够复杂,那可能值得考虑。否则,通常可以简单地重构代码以使其清晰:
for cno = 1:length(casenames)
data.(casenamesc) = struct;
... % do some file reading and fill in .x and .y
end
for cno = 1:length(casenames)
% read-modify-write idiom
data.(casenamesc) = dosomething(data.(casenamesc));
end
function case = dosomething(case)
case.z = case.x + case.y;
end
旁注:由于 Matlab 的“按值传递”实际上在内部是“通过写时复制的引用传递”,可能从 MEX 函数中利用这一点,但它完全不受支持并且可能导致意外行为。
【讨论】:
以上是关于是否可以在 Matlab 中通过引用来解析结构?的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB教程案例93在MATLAB中通过mex将C语言转化为matlab可执行的mexw64文件