【问题标题】:Is it possible to parse struct by reference in Matlab?是否可以在 Matlab 中通过引用来解析结构?
【发布时间】:2014-02-25 07:09:29
【问题描述】:

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

【问题讨论】:

    标签: matlab struct pass-by-reference


    【解决方案1】:

    对于基本数据类型,没有。你可以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 函数中利用这一点,但它完全不受支持并且可能导致意外行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-15
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      相关资源
      最近更新 更多