查看某个方法在哪里被调用_MATLAB局部函数公有化的方法: localfunctions
知乎视频www.zhihu.com
MATLAB的一个函数文件里面, 开头第一个函数是可以被外部调用的, 而其他函数是无法直接被外部调用的, MATLAB称之为局部函数.
如果用OOP的术语来说, 开头第一个函数可以被称为public函数, 其他函数可以被称为private函数.
举个例子:
function vals = computeEllipseVals(a, b)
e = computeEccentricity(a, b);
f = computeFocus(a, b);
ae = computeArea(a, b);
vals = e + f + ae;
% fh = localfunctions;
endfunction e = computeEccentricity(a, b)
f = computeFocus(a,b);
e = f/a;
endfunction f = computeFocus(a, b)
f = sqrt(a^2-b^2);
endfunction ae = computeArea(a, b)
ae = pi*a*b;
end
试图调用这四个函数:
结果是符合预期的, 第一个函数式public函数, 可以被外部调用, 而其他3个, 是private函数, 不能被外部调用, 只能被第一个函数调用.
有句话说得好, 计划赶不上变化.
原先定义那些private函数, 预期是不会被外部调用的. 但是, 需求发生了变化, 现在想要外面调用其中某个private函数了, 怎么办呢?
最简单的方法, 我相信每个人都能想到的: 将那个private函数复制出来, 生成一个新的函数文件, 这样的话, 那个private函数就成为了public函数了.
这样做当然是可以的, 但在我看来, 不够优雅, 至少有3个缺点:
1 复制出来的那个函数有可能调用了其他的private函数, 你很可能少复制了.
比如computeEccentricity函数调用了computeFocus函数.
2 多了一个文件.
文件越多, 维护起来成本越高.
3 同一个函数存在了两个版本了.
刚刚复制到外部的时候, 确实这两个版本是一模一样的, 但是以后可能会修改其中一个, 忘了修改另一个, 这是bug的主要来源之一.
现在向大家介绍一个优雅, 安全的做法: 利用localfunctions函数
function [vals, fh] = computeEllipseVals(a, b)
e = computeEccentricity(a, b);
f = computeFocus(a, b);
ae = computeArea(a, b);
vals = e + f + ae;
fh = localfunctions;
endfunction e = computeEccentricity(a, b)
f = computeFocus(a,b);
e = f/a;
endfunction f = computeFocus(a, b)
f = sqrt(a^2-b^2);
endfunction ae = computeArea(a, b)
ae = pi*a*b;
end
相比之前的代码, 就改动了两处:
1 增加语句: fh = localfunctions;
2 增加一个输出变量: fh
运行看一下结果:
fh就是一个cell, 内部是匿名函数, 那些匿名函数就是那些局部变量, 貌似顺序是按照定义的顺序来的, 如果不确定的, 先打印出fh变量查看.
现在可以调用局部函数了:
如果嫌索引的方法调用, 过于抽象(无法一眼看出调用的是哪个局部函数), 可以用以下方法来:
就是先将匿名函数, 起名为局部函数名, 然后就可以像调用public函数那样调用private函数了.
总结: 使用localfunctions函数, 可以优雅安全地调用局部函数, 值得大家使用.
创作不易, 请大家"素质三连": 点赞, 收藏, 分享.
查看某个方法在哪里被调用_MATLAB局部函数公有化的方法: localfunctions相关推荐
- 一种简单的,适合单片机的,数据加密解密方法,仅需要调用两个函数即可完成数据的加密解密
一种简单的,适合单片机的,数据加密解密方法,仅需要调用两个函数即可完成数据的加密解密 本人原创,源码可移步:https://gitee.com/demyli/easy-encrypt.git /*** ...
- ASP.NET后台调用前台JS函数的三种常见方法
为什么80%的码农都做不了架构师?>>> 第一种:使用普通的添加控件中的Attributes属性进行调用 例如,像一般的普通的按钮:Button1.Attributes.Add ...
- python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...
python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...
- java如何中断父类方法_java – 如何测试调用父类的受保护(不需要)方法的方法?...
我陷入了一个非常奇怪的情况. 我有一些我需要测试的特定代码. 这里是: public class A { /* * The real method of real class is so big th ...
- 继承里的方法 和成员变量调用,成员变量用 父类,方法用继承 ,Fu obj = new zi()
- 查看某个方法在哪里被调用_Object类有哪些方法?各有什么作用?
上帝类 - Object类 总共13个方法: Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类.当然,数组也继承了Object类.然而,接口是不继承Obje ...
- 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】
C#中dll调用方法 一. DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要 ...
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )
文章目录 一.重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 1.被拦截的 String#contains 方法原型 2.JDK 正常用法 3.拦截 Strin ...
- python 类的内置方法_【转】[python] 类常用的内置方法
原文:http://xukaizijian.blog.163.com/blog/static/170433119201111894228877/ 内置方法 说明 __init__(self,...) ...
最新文章
- 2019 ACM - ICPC 西安邀请赛 B. Product (杜教筛) 简单数论(bushi)
- Memcache的原理的详解
- 网站图片优化需要注意哪些方面?
- 用Gridview和ObjectDataSource轻松实现自定义分页
- C++ 限定名称查找
- 什么格式的照片可以是透明的
- 计算机固态硬盘安装,台式计算机的固态硬盘安装方法和步骤教程
- R语言:蒙特卡洛模拟
- mysql 嵌套_MySQL的嵌套查询
- 图虫知识共享协议_100%避免图片版权侵权的方法(网站图片侵权赔款标准)
- 个人软件定制开发多少钱,怎么核算
- 贪吃蛇 c语言 不死模式,贪吃蛇大作战不死版-贪吃蛇大作战不死版本下载-乐游网安卓下载...
- unity 生成和识别二维码
- ubuntu16.04火狐浏览器B站提示下载flash插件
- 读唐巧博客2011年总结感想
- 求两者较大值的max函数的用法(c++基础)
- 生活记录:突然“醒来”
- linux设置mysql防火墙端口映射_Linux防火墙默认是关闭3306端口,iptables实现端口转发、端口映射及双向通路...
- 吉信通短信接口(HTTP协议) java
- android studio高德地图的显示于定位(附带逆地理编码围栏)
热门文章
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- [Python Study Notes]正则表达式
- 【bzoj1212】[HNOI2004]L语言 AC自动机
- 5.【练习题】构造方法与重载
- 2019\Province_C_C++_B\试题E-迷宫
- 征战蓝桥 —— 2016年第七届 —— C/C++A组第10题——最大比例
- 1035:等差数列末项计算
- 《算法学习与应用 从入门到精通》——填写运算符
- python中文件读写问题及解决方法
- 【STM32】STM32系列教程汇总(暂时暂停更新...)