1 嵌套函数
1 变量工作域
嵌套函数和主函数之间变量可以互相访问。其中嵌套函数直接可以用主函数区间的变量,主函数必须先调用嵌套函数后,才能访问其中的变量。
function r = ceshi(b)
A % 第一层:1
function c1 = Nest1
B1 % 第二层:1.1
c12 = Nest12;
function c12 = Nest12
C1 % 第三层:1.1.1
end
end
function c2 = Nest2
B2 % 第二层:1.2
c22 = Nest22;
function c22 = Nest22
C2 % 第三层:1.2.1
end
end
end
上面函数是一个例子,1、1.1、1.1.1共享它们的工作区。1、1.2、1.2.1共享它们的工作区,其他都不共享。
- 总之,嵌套函数和更高级的嵌套函数直至主函数之间的变量都可以共享,属于一个工作区。嵌套函数可以访问父嵌套函数的变量,想要访问子嵌套函数,必须先调用才可以访问。
- 彼此之间没有嵌套函数关系的nest function, 不能简单的共享变量。
1 爷爷,大儿子和大孙子都可以共享爷爷的东西,大儿子向爷爷要东西,不需要申请,直接就用。大孙子向大儿子和爷爷要东西,也是直接可以用。反而爷爷要用大儿子的,必须先给大儿子说(调用)。爷爷要用大孙子的,必须先给大儿子说(调用),大儿子也得给大孙子说(调用)。爷爷不能直接向大孙子要(不能直接调用)。
2 爷爷和小儿子,小孙子之间也是这样的。反而大儿子大孙子,和小儿子小孙子之间不能共享变量。
2 函数之间的调用
function r = ceshi
disp('main function');
Nest1
function Nest1
disp('nest1 function')
Nest11;
% Nest21;
function Nest11
disp('nest11 function')
Nest111
function Nest111
disp('nest111 function');
Nest1111
function Nest1111
disp('nest1111 function');
Nest2;
end
end
end
end
function Nest2
disp('nest2 function')
function Nest21
disp('nest21 function')
end
end
end
这个函数表明了,直接形象描述:
求助:代表(调用)
- 父亲可以求助儿子,儿子可以求助父亲,也即父子之间可以互相求助。一个人不能求助自己的孙子及其重孙子,也可以求助的祖辈(爷爷,重爷爷等等)。一个人可以求助于自己的亲兄弟或者父亲的亲兄弟,或者爷爷的亲兄弟等等,但是不能求助于自己的侄儿或者重侄儿。
- 共享工作区变量是指一个派系下来的。就比如自己的儿子,孙子和父亲,爷爷共享一个工作区。父辈们要访问,先调用;字辈不需要申请,可以直接访问。其余旁系不共享工作区。
2 匿名函数
函数句柄不仅可以存储表达式,还能存储表达式进行计算需要的变量。
例如,为需要系数 a、b 和 c 的匿名函数创建函数句柄。匿名函数的@(x)ax^2+bx+c 中,a,b,c可以都存在于当前的工作区间内,x就是代表输入。也可以@(x,a,b,c)=ax^2+bx+c.
a = 1.3;
b = .2;
c = 30;
parabola = @(x) a*x.^2 + b*x + c;
由于 a、b 和 c 在您创建 parabola 时可用,该函数句柄包含这些值。即使您清除变量,这些值仍持久保留在函数句柄内:
clear a b c
x = 1;
y = parabola(x)
y =
31.5000
要为这些系数提供不同值,您必须创建新的函数句柄:
a = -3.9;
b = 52;
c = 0;
parabola = @(x) a*x.^2 + b*x + c;
x = 1;
y = parabola(1)
y =
48.1000
可以将函数句柄及其相关值存储在 MAT 文件中,然后使用 save 和 load 函数在后续的 MATLAB 会话中加载它们,例如
save myfile.mat parabola