查看某个方法在哪里被调用_MATLAB局部函数公有化的方法: localfunctions
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四针手表指的是什么_1000~1500元
- 下一篇: 服务器同时登入会被挤下来吗_「英雄联盟手