2013-03-17 167 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