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

时间:2011-05-12 05:34:18

标签: function matlab file function-pointers

  

可能重复:
  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

更新:新问题:是否有良好方式执行此操作?或者我应该真的只是吮吸它并继续制作更多文件?

2 个答案:

答案 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