关于我的全局变量 {matlab} 范围的问题

Question regarding the scope of my global variable {matlab}

我正在尝试为我的 class 分配作业,如果我想返回,单击撤消按钮应该会重新加载应用于图像的先前转换。 golabal 变量定义在代码的开头

function LoadimgBtn_Callback(hObject, eventdata, handles)
% hObject    handle to LoadimgBtn (see GCBO)
[filename,pathname]=uigetfile('C:\Users\hassan\Desktop\DIP PROJECT IMGS\MonoChrome 
Images\*.jpg;*.png;*.jpeg');
file_path=strcat(pathname,filename);
og_img=imread(file_path);
axes(handles.org_img);
imshow(og_img);
prev_img=og_img;
axes(handles.intr_img);
imshow(prev_img);

据观察,全局变量 prev_img 在这里得到了完美的利用,但是当我尝试在我的撤消代码中使用相同的变量时,会抛出一个错误,指出该变量不存在。

function UndoBtn_Callback(hObject, eventdata, handles)

axes(handles.intr_img);

imshow(prev_img);

我想通过全局变量的方式使用同一个变量。

显然在 mat lab 中每次使用全局变量时都必须在函数范围内重新声明它。 我不确定,但我认为如果我没有像以前那样在函数范围内明确提及关键字 global,它会创建一个同名变量的本地实例。

在我的例子中,我不得不在两个位置提到全局并且它有效。

你需要在你的函数代码中再次调用全局变量

function UndoBtn_Callback(hObject, eventdata, handles)

axes(handles.intr_img);
global prev_img % declaring a global variable "again"
imshow(prev_img);

否则,您将使用同名局部变量掩盖全局变量。 (请记住,您也可以定义与 matlab 函数同名的函数,例如 sum。)问题是,matlab 不知道您希望变量是全局变量。持久变量也是如此。 在函数中定义全局变量后,matlab 会检查此(全局)变量是否已存在以及它是否已有值。 如果我的解释不够直观,您可能想看看 matlab-docs

要清除全局变量,需要调用clearvars -globalclear allclear global

  • To clear a global variable from all workspaces, use clear global variable.
  • To clear a global variable from the current workspace but not other workspaces, use clear variable.