嵌套函数和匿名函数

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,412评论 0 27
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,206评论 0 5
  • 写在之前 因为简书字数限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...
    hainingwyx阅读 14,774评论 0 41
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,759评论 0 38
  • 这周要谈的是左字,左在《颜勤礼碑》一共出现了五次,老师给我们的字帖是4号左。 五个左字比较起来,老师为我们选出的左...
    Lufi阅读 6,406评论 2 1

友情链接更多精彩内容