2013-03-17 224 views
6

我有一個在m文件中定義的local function。例如:從命令行調用本地函數

% begining of public_function.m file 
function fh = public_function() 
% 
% do some computation... 

fh = @local_function; % return function handle to local function defined below 

function y = local_function(x) 
% 
% a local function inside public_function.m file 
% 

% some manipulation on x 
y = x; 

% end of public_function.m file NOTE THAT local_function is NOT nested 

現在,我想調用命令行local_function(而不是從public_function)。我能做到這一點利用public_function返回的功能句柄:

>> fh = public_function(); % got handle to local_function 
>> y = fh(x); % calling the local function from command line :-) 

我的問題:
是否有任何其他方式(除了明確地傳遞給函數句柄)來調用命令行的本地函數(或其他m文件/功能)?

更確切地說,我想要一個方法來訪問文件中的任何本地函數(前提是我知道它的名字)。所以,如果我有public_function.m文件(和函數)和我知道local_function是該文件的本地,有沒有辦法從命令行訪問local_function

+2

您可以通過子功能的名稱作爲主函數的參數。查看第二個示例:http://www.mathworks.de/support/solutions/en/data/1-19LN6/?solution=1-19LN6 – 2013-03-17 15:11:20

+0

您是否在matlab文件交換中檢查了mklib?它會自動創建句柄到您列出的文件中的任何本地函數作爲函數參數:http://www.mathworks.de/matlabcentral/fileexchange/7597-mklib-a-pedestrian-function-library-loader-generator – 2013-03-18 15:17:40

+0

更好的問題這就是爲什麼如果您迫切需要從m文件之外調用該函數,那麼您將該函數作爲本地函數。使一些東西成爲本地功能的想法是限制它的範圍。也許你應該把它放在自己的m文件中,或者把它變成一個私有函數。我建議看看[這個問題](http://stackoverflow.com/q/3569933/52738)瞭解更多信息。 – gnovice 2013-10-16 18:36:14

回答

4

The official documentation說:

...你不能在命令行或其他文件中函數調用的本地函數。

據此,您必須將其句柄傳遞給調用者,以便允許在它的m文件之外間接調用它。我相信沒有形成明智的方式來訪問當地的功能。

奇怪的是,雖然,你仍然可以做到這一點與help

help public_function>local_function 
+0

我很希望釣魚一些無證的方式來解決這個「你不能調用一個本地函數......」沿着'幫助'行爲的東西...... – Shai 2013-03-17 16:18:07

+1

@Shai Yeah,我也是。儘管我發佈了這個答案,但我仍在尋找。 – 2013-03-17 16:30:34

+0

@Shai:也許你可以添加你想要達到的目標嗎?您是否正在尋找一種方法來訪問任意文件中的任何本地函數,或者您是否想要一個包含大量子函數的「主函數」以供日常使用? – 2013-03-18 11:05:48