从命令行调用本地函数

8

我在一个m文件中定义了一个本地函数。例如:

% 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 - H.Muster
你有没有在Matlab文件交换中心检查mklib?它会自动创建到您在函数参数中列出的文件中的任何本地函数的句柄:http://www.mathworks.de/matlabcentral/fileexchange/7597-mklib-a-pedestrian-function-library-loader-generator - H.Muster
一个更好的问题是,如果你有迫切需要从m文件外部调用函数,为什么要将函数设置为本地函数。将某些东西设置为本地函数的想法是限制其范围。也许你应该将它放在自己的m文件中,或者将其设置为私有函数。我建议查看这个问题以获取更多信息:https://dev59.com/hXA65IYBdhLWcg3w6DFO。 - gnovice
1
我认为这并不是一个不合理的要求。如果一个函数f只被另一个函数使用,那么将其作为本地函数以限制其范围是可行的。问题在于,如果f被n>1个其他函数使用,则必须存在于全局命名空间中。对于大型项目来说,这显然是不可行的解决方案。 - Derek
1个回答

5

官方文档表示:

……您无法从命令行或其他文件中的函数调用本地函数。

因此,您必须将其句柄传递给调用者,以便允许在其m文件之外间接调用它。我认为,除此之外,没有被记录下来的明智的方式来访问本地函数。

然而,奇怪的是,您仍然可以使用help实现这一点:

help public_function>local_function

我非常希望能够钓到一些未记录的方法来解决这个“您无法调用本地函数…”的问题,类似于help行为… - Shai
1
@Shai 是的,我也是。尽管我发布了这个答案,但我仍在寻找。 - Eitan T
@Shai:也许你可以在最后添加一下你想要实现的目标是什么?你是想要一种方法来访问任意文件中的本地函数,还是想要一个带有许多子函数的“主函数”用于日常使用? - H.Muster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接