我怎么能从外部访问子功能MATLAB的主要功能?

34视图(30天)
我有一个函数文件,其中包含一些子功能,在下面的例子中:
函数foo1
disp (这个函数包含子函数可以调用。)
foo2;
foo3;
函数foo2
disp (“在foo2”);
函数foo3
disp (“在foo3”);
我想访问子功能“foo2”和“f003”以外的函数(类似于C)的“包括”功能。

接受的答案

MathWorks支万博1manbetx持团队
从外部访问子功能的能力的一个函数文件通过一个“包括”在MATLAB功能不可用。
为了解决这个问题,子功能函数的主要功能可以提供一个结构处理作为一个输出参数。作为一个例子,修改如下函数“foo1”并将其保存在一个名为foo1.m的文件:
函数fun_api = foo1
fun_api。foo2= @foo2;
fun_api。foo3= @foo3;
函数foo2
disp (“在foo2”);
函数foo3
disp (“在foo3”);
子功能foo2和foo3现在可以被称为foo1以外。米以下的方式:
fun_api = foo1;
fun_api.foo2 ();
fun_api.foo3 ();

答案(1)

Xiangrui李
Xiangrui李 2020年8月1日
我这里有两个方法使用访问本地函数。m文件可能看起来像这样:
函数varargout = myMainFunc(变长度输入宗量)
% myMainFunc设计可以做自己的工作,而且通常称这些地方
% m文件中函数。
%我们滥用第一两个输入,如果有的话,访问当地的所有功能
%你需要这个if块插入你的主要功能的开始
如果输入参数个数> 1 & & (ischar(在)| | isStringScalar ())
如果在= =“LocalFunc”%调用本地函数与可选的输入/输出
[varargout {1: nargout}] =函数宏指令(变长度输入宗量{:});
返回;%我们只访问本地函数,所以跳过其他的主要功能
elseif在= =“FuncHandle”%返回一个句柄使用以外的主要功能
varargout {1} = str2func(变长度输入宗量{1});
返回;
结束
结束
%这里可能是漫长的主要代码调用某个本地函数
= mySubFunc(的);%的输入可以是任何数据类型的设计
%……
函数= mySubFunc (in)
%这是本地函数做自己的工作
disp (“输入mySubFunc是“+三机一体);
= in1 * 2;
外的m文件,我们可以打电话 mySubFunc 直接:
myMainFunc (“LocalFunc”,“mySubFunc”,123)
这给了
输入mySubFunc是123
如果 mySubFunc 可以多次使用,我们可以得到它的功能处理避免高于长期的语法:
mySubFunc = myMainFunc (“FuncHandle”,“mySubFunc”);%返回处理
mySubFunc (123)%使用它像普通函数
= mySubFunc (3)
精工细作的输入/输出的if块会照顾可能变量输入/输出不同的本地功能,所以使语法更普遍。唯一的牺牲是关键字 LocalFunc FuncHandle 不能用作一般主要功能的输入。

类别

找到更多的在大数据处理帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!