主函数(Primary function)
l (一般)与保存文件同名的那个函数;
l 在当前目录、搜索路径上,列出文件名的函数;
l 在指令窗中或其他函数中,可直接调用的函数;
l 函数M文件中,由第一个function 引出的函数。
( 采用 help functionname 可获取函数所携带的帮助信息。)
子函数(Subfunction)
l 子函数不独立存在,只能寄生在主函数体内;
l 在函数文件中,由非第一个function引出的函数;
l 一个M函数文件可以包含多个子函数;
l 子函数只能被其所在的主函数和其他“同居”子函数调用;
l 子函数可以出现在主函数体的任何位置,其位置先后与调用次序无关。
l 在M函数文件中,任何指令通过“名字”对函数进行调用时,子函数的优先级仅次于内装函数。
l 同一文件的主函数、子函数的工作空间都是彼此独立的。各函数间的信息,或通过输入输出宗量传递,或通过全局变量传递,或通过跨空间指令传递。
l 采用help functionname/subfunctionname 可获取子函数所带的帮助信息。
嵌套函数(Nested function)
l 在函数文件中,由非第一个function引出,并以end为结尾的函数;
l 一个M函数文件可以包含多个嵌套函数;
l 主函数一旦包含嵌套函数,就必须在整个函数文件的结尾使用end,以结束主函数及其所有附带的函数;
l 嵌套函数只能被其“直系父、子”或“亲兄弟”函数调用;
l 采用help functionname/nestedfunctionname 可获取嵌套函数所带的帮助信息。
嵌套函数的调用规则
1 function A(x, y) % 主函数 2 B(x, y); % 只能调用“子B”;不能调用“孙C” 3 D(y); % 只能调用“子D”;不能调用“孙E” 4 function B(x, y) % “子”嵌套函数 B 5 C(x); % 调用“子C” 6 D(y); % 调用“兄D”;不能调用“侄E” 7 function C(x) % “孙”嵌套函数 C 8 D(x); % 调用“叔D” 9 end 10 end 11 function D(x) % “子”嵌套函数 D 12 E(x); % 调用“子E” 13 function E % “孙”嵌套函数 E 14 ... 15 end 16 end 17 end 18 19 20 嵌套函数的变量定义范围。 21 function exm06044_2_1 22 x = 5; % 在主函数中定义的变量 x 23 nestfun1 24 function nestfun1 25 nestfun2 26 function nestfun2 27 x = x + 1 %在“孙”嵌套函数中,可以寻访、修改。 28 end 29 end 30 end 31 32 33 function exm06044_2_2 34 nestfun1 35 function nestfun1 36 nestfun2 37 function nestfun2 38 x = 5; %在“孙”嵌套函数中,定义的变量 x 39 end 40 end 41 x = x + 1 %在主函数中,可以寻访、修改。 42 end 43 44 function exm06044_2_3 45 nestfun1 46 nestfun2 47 function nestfun1 48 x = 5; %在“兄”嵌套函数中,定义变量 x 49 end 50 function nestfun2 51 x = x + 1 %在“弟”嵌套函数中,不能寻访、修改 x 52 end 53 end
〖说明〗
l 嵌套函数有自己的内存空间,但与其直系函数的内存空间之间存在同名变量接口。
l 兄弟嵌套函数各具独立的内存空间,各自空间内的同名变量相互独立,没有任何联系。
私用函数(Private function)
l 在名为Private的子文件夹上的M函数文件;
l 私用函数的构造与普通M函数完全相同。
l 私用函数只能被其直接“父”文件夹上函数文件所调用。
l M文件中,任何指令通过“名字”对函数进行调用时,私用函数的优先级虽低于内装函数和子函数,但高于其他任何目录上的函数。
l 私用函数的帮助信息可用以下指令获得
help private/myprivfun
匿名函数(Anonymous function)
l 不以M文件形式驻留在文件夹上的函数;
l 可在指令窗或任何函数体内直接通过指令生成的函数。
l 创建匿名函数的方法
n 在指令窗或任何M文件中,运行以下指令
fhandle = @(arglist) expr
fhandle 属函数句柄数据类型
arglist 匿名函数的输入量
expr 用输入量构成的函数表达式
n 调用格式
fhandle(arglist)
l 匿名函数expr中,除了输入变量arglist外的其他变量必须是已经被赋值的,并从此在该匿名函数的整个存在期间保持不变,不管该匿名函数在以后调用时那些变量自身值是否已经变化或甚至不再存在。