5

这是问题所在:我有一个 .m 文件要测试,其中有一个主函数和几个由主函数调用的内部函数。

如何从控制台调用此内部函数(以测试它们)?

例子:

function main
   function_1;
   function_1;
end

function_1
disp('this is');
end

function_2
  disp(' an example');
end

如何直接从控制台测试它?

4

3 回答 3

2

如果您有它的句柄,您实际上可以在定义它的 M 文件之外使用内部(本地)函数。例如,以下函数使用命令返回所有子函数localfunctions句柄,

% internalHandlesTest.m
function [out,hl] = internalHandlesTest(in)

out = subfun1(in);

% hl = @subfun1; % just to get one internal function handle
hl = localfunctions; % to get all internal function handles

end

function subout = subfun1(subin)
% still internalHandlesTest.m
fprintf('You are using internalHandlesTest>subfun1!\n');
subout = subin;
end

function subfun2()
% still internalHandlesTest.m
fprintf('You are using internalHandlesTest>subfun2!\n');
end

让我们尝试一下:

>> [out,hl] = internalHandlesTest(0);
You are using internalHandlesTest>subfun1!
>> disp(hl)
    @subfun1
    @subfun2
>> hl{1}(1)
You are using internalHandlesTest>subfun1!
ans =
     1
>> hl{2}()
You are using internalHandlesTest>subfun2!
>> 

因此,我们可以在 M 文件之外使用内部函数。这些函数的类型是scopedfunctions,我们能够这样做是因为 MATLAB 会跟踪它parentage和源文件。在这些句柄上查看命令functions输出:

>> functions(hl{1})
ans = 
     function: 'subfun1'
         type: 'scopedfunction'
         file: 'E:\Users\jchappelow\Documents\MATLAB\internalHandlesTest.m'
    parentage: {'subfun1'  'internalHandlesTest'}

当然,你可以很容易地看到内部函数的帮助:

>> help internalHandlesTest>subfun1
  still internalHandlesTest.m

但是要运行本地函数,您需要获取函数句柄,该句柄只能通过规范函数的输出参数获得。

于 2013-10-16T18:17:46.000 回答
2

根据help function(另见在线文档):

子函数在定义它们的文件之外是不可见的。

所以你需要一个断点,它可以让你访问内部函数,就像你在 .m 文件中一样:

  1. 在 .m 文件的主函数中的某个点设置断点
  2. 运行 .m 文件
  3. K>>出现提示时,您可以从控制台调用内部函数。
于 2013-10-16T11:13:35.923 回答
0

如果它适合您的设计,您可以创建包并将所有功能保留在那里并从该包中调用它们。这篇文章可能会帮助你: http: //www.mathworks.se/help/matlab/matlab_oop/scoping-classes-with-packages.html

于 2013-10-16T11:17:12.870 回答