MATLAB
函式global簡介
函式功能:聲明全局變數。
語法格式:
global X Y Z
聲明X、Y、Z為全局變數。
通常,在MATLAB中,每個函式都有屬於它自己的局部變數,這些局部變數不能被與該函式處於同一個等級上的函式訪問。
例如:
function main
close all; clear; clc;
function fun_a
num_in_a = 5;
fprintf('It is in function A: %f,\n', num_in_b); % error
end
function fun_b
num_in_b = 6;
fprintf('It is in function B: %f,\n', num_in_a); % error
end
fun_a;
fun_b;
end
由於num_in_a,num_in_b分別是函式fun_a和fun_b的局部變數, 因此fun_a只能訪問num_in_a而不能訪問num_in_b。
但是如果,函式不在同一個等級上。例如,嵌套函式, 情況就有所不一樣:
function main
close all; clear; clc;
function fun_a
% fprintf('It is in function A: %f,\n', num_in_b); % error
function fun_b
num_in_b = 6;
fprintf('It is in function B: %f,\n', num_in_a); % correct
end
num_in_a = 5;
fun_b;
end
fun_a;
end
定義全局變數就是可以讓這些函式共享這個全局變數,即只要在這個函式內部加上:
global X Y Z
那么,該函式便擁有了對X、Y、Z的訪問權。
而且全局變數在記憶體中也只有一份, 在一個函式中修改, 在另外一個函式中的值也會發生變化。
相關函式:isglobal
程式示例
function streamline_test
close all; clear; clc;
global startx starty startz
startx = 1; starty = 1; startz = 1;
uicontrol(gcf, 'Style','pushbutton','String','starty ++',...
'Position',[250,20,70,25],...
'Callback',{@StartYAdd_Callback});
uicontrol(gcf, 'Style','pushbutton','String','starty --',...
'Position',[350,20,70,25],...
'Callback',{@StartYMinus_Callback});
uicontrol(gcf, 'Style','pushbutton','String','display',...
'Position',[450,20,70,25],...
'Callback',{@DispNum_Callback});
end
function StartYAdd_Callback(~, ~)
global starty
starty = starty + 1;
end
function StartYMinus_Callback(~, ~)
global starty
starty = starty - 1;
end
function DispNum_Callback(~, ~)
global startx starty startz
fprintf('startx: %f, starty: %f, startz: %f\n', startx, starty,
startz);
end