问题是:我有一个.m文件要测试,其中有一个main函数和几个内部函数被主函数调用。
如何从控制台调用此内部函数(测试它们)?
示例:
function main
function_1;
function_1;
end
function_1
disp('this is');
end
function_2
disp(' an example');
end
如何直接从控制台测试?
答案 0 :(得分:2)
根据help function
(另请参阅online doc):
在定义它们的文件之外,子功能不可见。
所以你需要一个断点,它允许你访问内部函数,就像你在.m文件中这样做一样:
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