是否可以在 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文件

C++ 11 可以在不同线程中通过引用安全地传递和访问 std::atomics

在C中通过引用传递数组?

何时在 PHP 中通过引用传递

在 C++ 中通过引用传递时参数的默认值

matlab中通过ode函数求解常微分方程附加简单的钟摆模型