这是问题所在:我有一个 .m 文件要测试,其中有一个主函数和几个由主函数调用的内部函数。
如何从控制台调用此内部函数(以测试它们)?
例子:
function main
function_1;
function_1;
end
function_1
disp('this is');
end
function_2
disp(' an example');
end
如何直接从控制台测试它?
这是问题所在:我有一个 .m 文件要测试,其中有一个主函数和几个由主函数调用的内部函数。
如何从控制台调用此内部函数(以测试它们)?
例子:
function main
function_1;
function_1;
end
function_1
disp('this is');
end
function_2
disp(' an example');
end
如何直接从控制台测试它?
如果您有它的句柄,您实际上可以在定义它的 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
但是要运行本地函数,您需要获取函数句柄,该句柄只能通过规范函数的输出参数获得。
根据help function
(另见在线文档):
子函数在定义它们的文件之外是不可见的。
所以你需要一个断点,它可以让你访问内部函数,就像你在 .m 文件中一样:
K>>
出现提示时,您可以从控制台调用内部函数。如果它适合您的设计,您可以创建包并将所有功能保留在那里并从该包中调用它们。这篇文章可能会帮助你: http: //www.mathworks.se/help/matlab/matlab_oop/scoping-classes-with-packages.html