有没有办法从文件外部调用MATLAB"子函数"?

par*_*ser 0 matlab function-pointers file function

可能重复:
是否可以在MATLAB中为每个文件定义多个函数?

为了在MATLAB中定义(非匿名)函数,您需要创建一个与函数同名的文件; 例如,一个名为myfunc的函数可以在文件myfunc.m中定义,如下所示:

function rtn = myfunc(arg)
% do some stuff
end
Run Code Online (Sandbox Code Playgroud)

假设在同一个文件myfunc.m中,我还有一个子函数,如

function rtn = myfunc(arg)
% do some stuff
end

function rtn = mysubfunc(arg)
% do some other stuff
end
Run Code Online (Sandbox Code Playgroud)

据我所知,没有办法访问mysubfunc从执行的以外的任何地方发生subfunc.m文件.在MATLAB(R2010b)中,我一直并且继续被这个小小的特质所困扰.我错了-有任何方法来调用mysubfunc从外部myfunc.m

更新:新问题:有什么办法吗?或者我应该真的只是吮吸它并继续制作更多文件?

And*_*nke 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
Run Code Online (Sandbox Code Playgroud)

在缺点方面,您需要限定或导入对它们的所有引用,例如mystuff.myfunc()."import mystuff.*"可以为类外的代码处理这个问题.

import mystuff.*
myfunc()
mysubfunc()
Run Code Online (Sandbox Code Playgroud)

在类中,函数之间的调用需要限定.(Matlab的MCOS语法中的大问题,恕我直言.)此外,它们比常规函数有更多的调用开销,因此如果你在紧密循环中调用它们,你的代码会更慢.从好的方面来说,现在他们是班级成员,你可以重构他们以利用私人类字段和功能等等.

如果要组织代码库,可以将它们放在名称空间中,方法是将它们放在名称以"+"开头的目录中.相同数量的文件,但至少你有一些结构给你的目录.