我正在为dicom图像和光谱学编写一个工具,我想在我正在创建的功能之间使用许多共享数据我制作了GUI,不同的滑块和按钮使用了大量dicom文件中的共享数据。
我一直在使用全局变量来存储所有这些函数共享的信息我现在有很多全球性的我被教导,如果可能的话,避免全局变量,因为耦合增加在每个函数中读取dicom文件中的数据会更好吗这似乎是多余的使用MATLAB作为面向对象的帮助吗?

最佳答案

既然您提到您正在使用GUI并希望在控件回调之间共享数据,我建议您使用nested functions设计代码总体代码如下所示:

function dicomGUI

  %# Initialize your GUI here, linking the control callbacks to the
  %#   nested functions below:

  hLoad = uicontrol('Style', 'push', 'String', 'Load file', ...
                    'Callback', @load_file);
  ...

  %# Initialize the data variables for the DICOM files here:

  data = [];  %# Shared among nested functions
  ...

  %# Below are all the nested functions your controls will use:

  function load_file(hSource, event)
    data = ...;  %# Load the data here
  end
  ...

end

这样不仅可以将所有的GUI代码放在一个m文件中,而且还简化了控件回调,使它们更容易在父函数的工作区中共享变量这种方法的一个例子,以及在GUI控件之间共享数据的其他建议,可以在以下文档页上找到:Share Data Among a GUI's Callbacks
正如Chris提到的,对于一个庞大而复杂的GUI来说,这可能成为一个非常大的m文件在这种情况下,为了减小文件大小,我建议将每个回调的主体简单地设置为调用一个单独文件中的函数,该文件接受共享数据变量,执行任何必要的工作,然后将修改后的数据返回给相同的共享变量例如:
function transform_callback(hSource, event)

  %# Apply some transform to the data:
  data = transform_data(data);

  %# If the above changes the GUI (disabling controls, changing a
  %#   display, etc.), then those changes should be made here.

end

09-10 04:45
查看更多