如何从命令提示符调用.m的内部函数?

时间:2013-10-16 10:51:49

标签: matlab matlab-deployment

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

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

示例:

function main
   function_1;
   function_1;
end

function_1
disp('this is');
end

function_2
  disp(' an example');
end

如何直接从控制台测试?

3 个答案:

答案 0 :(得分:2)

根据help function(另请参阅online doc):

  

在定义它们的文件之外,子功能不可见。

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

  1. 在.m文件的主要功能中的某个点设置断点
  2. 运行.m文件
  3. 出现K>>提示时,您可以从控制台调用内部功能。

答案 1 :(得分:2)

你实际上可以在定义它的M文件之外使用internal (local) function,如果你有它的句柄。例如,以下函数将句柄返回到the localfunctions command

的所有子函数
% 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和源文件。请参阅这些句柄上the functions command的输出:

>> 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

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

答案 2 :(得分:0)

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