可能重复:
Is it possible to define more than one function per file in MATLAB?
为了在MATLAB中定义(非匿名)函数,您需要创建一个与函数同名的文件;例如,一个名为 myfunc 的函数可以在文件 myfunc.m 中定义:
function rtn = myfunc(arg)
% do some stuff
end
假设在同一个文件 myfunc.m 中,我还有一个子功能,如
function rtn = myfunc(arg)
% do some stuff
end
function rtn = mysubfunc(arg)
% do some other stuff
end
AFAIK,无法在 subfunc.m 文件之外的任何地方执行 mysubfunc 。在MATLAB(R2010b)中,我一直并且继续被这个小小的特质所困扰。我错了 - 是否有任何方式从 myfunc.m 外部调用 mysubfunc ?
更新:新问题:是否有良好方式执行此操作?或者我应该真的只是吮吸它并继续制作更多文件?
答案 0 :(得分:9)
您可以在实用程序类中使它们成为所有静态方法。这些函数可以按名称全局引用,但您只需要管理一个M文件。
classdef mystuff % in mystuff.m
%MYSTUFF Utility functions for something or other...
methods (Static = true)
function rtn = myfunc(arg)
disp('myfunc');
end
function rtn = mysubfunc(arg)
disp('mysubfunc');
end
end
end
在缺点方面,您需要限定或导入对它们的所有引用,例如mystuff.myfunc()。 “import mystuff。*”可以解决此类代码之外的代码。
import mystuff.*
myfunc()
mysubfunc()
在课堂上,需要对函数之间的调用进行限定。 (Matlab的MCOS语法中的大问题,恕我直言。)此外,它们比常规函数有更多的调用开销,因此如果你在紧密循环中调用它们,你的代码会更慢。从好的方面来说,现在他们是班级成员,你可以重构他们以利用私人班级领域和职能等等。
如果要组织代码库,可以将它们放在命名空间中,方法是将它们放在名称以“+”开头的目录中。相同数量的文件,但至少你有一些结构。
答案 1 :(得分:1)
通过功能句柄访问。它可以被视为OO仿真(静态方法)。我不建议您使用此技术。
function obj = mainFunc()
obj.myFunc = @myFunc;
obj.mySubFunc = @mySubFunc;
end
function rtn = myFunc(arg)
% do some stuff
end
function rtn = mySubFunc(arg)
% do some other stuff
end