QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1955|回复: 0
打印 上一主题 下一主题

子函数和私有函数

[复制链接]
字体大小: 正常 放大
回帖奖励 1 点体力 回复本帖可获得 1 点体力奖励! 每人限 1 次

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-9-18 21:30 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    子函数和私有函数
       在一个单个的文件中我们可以创建多个函数。如果超过1个的函数出现在一个文件中,那么最上面的那个函数为普通函数,下面的函数称为子函数或中间函数。子函数看起来和普通函数一样,但是只能被同一文件中的函数调用。
       下面的例子定义了一个函数mystats和两个子函数mean和median。函数mystats能被其他的maltab函数调用,但是子函数mean和median只能同一文件中的其他函数调用。

    function [avg, med] = mystats(u)
    %MYSTATS Find mean and median with internalfunctions.
    %   FunctionMYSTATS calculates the average and median
    %   of adata set using subfunctions.
    n = length(u);
    avg = mean(u, n);
    med = median (u, n);
    function a = mean(v, n)
    %  Subfunction to calculate average.
    a = sum(v) / n;
    function m = median(v, n)
    %  Subfunction to calculate median
    w = sort(v);
    if rem(n, 2) ==1
        m =w((n+1)/2);
    else
        m =(w(n/2) + w(n/2 + 1))/2;
    end


       私有函数是指属于以private为名字的子目录中的函数。这些函数只有在父目录中才是可见的。
       例如,假设在MATLAB搜索路径中有一testing目录,在testing目录中,又有一个private子目录。private中的函数只能由testing中的函数调用。
       因为对于父目录以外目标私有函数是不可见的,所以它能用其他目录中的函数重名。有了这种特性,如果你要创建自己的函数,则不必要考虑与其他目录重名。因为MATLAB先对私有函数查找,然后再对标准的M文件函数进行查找,所以它将首先找到私有函数test.m,再找到非私有M文件test.m。
       在包含有你的函数的目录中,我们可以很创建你的私有目录。不要在你的搜索路径中放置你的私有目录。
       在一个M文件中,调用一个函数,MATLAB先检查看他是否是一个子函数。如果它不是那就检查它是不是一个私有函数。如果也不是私有函数,MATLAB就会检它在不在标搜索路径中。
       如果你有特殊的目的,MATLAB函数只能由其他的函数调用,而绝不能由使用者调用,则考虑用子函数或私有函数来隐藏它们
       隐藏这些函数防止了它们偶然的使用,也能防止与其他公共函数重名时发生的冲突。
       好的编程习惯
       用子函数或私有函数来隐藏特殊目的的函数,这些隐藏的函数只能被其他函数调用。隐藏这些函数防止了它们偶然的使用,也能防止与其他公共函数重名时发生的冲突。




    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-21 09:19 , Processed in 0.597875 second(s), 51 queries .

    回顶部