如何安排matlab代码?

时间:2015-10-23 11:26:06

标签: matlab

假设我有一些使用某些函数的MATLAB代码。 我不想在与使用的代码相同的文件中定义函数 功能。

另一方面,为每个函数制作m文件的解决方案对我来说也不好,因为我不想要很多文件。 我想要的是类似于包含这些函数的utils文件,例如,我可以像在python中那样导入函数。

你会推荐什么?

2 个答案:

答案 0 :(得分:12)

你可能想要的是使用package,它有点像python模块,因为它是一个可以容纳多个文件的文件夹。您可以通过在文件夹名称的开头添加+来完成此操作,例如+mypackage。然后,您可以使用类似于Python的package.function表示法访问文件夹中的函数和类,而不会污染全局函数列表(只将包添加到全局列表中,而不是添加到其中的每个函数中)。您还可以导入单个函数或类。但是,你总是必须使用完整的函数路径,没有像Python那样的相对路径。

但是,如果你真的想要每个文件有多个函数,那么你可以做的最好的事情就是创建一个顶级函数,为文件中的其他函数返回struct function handles个,并且然后从该结构访问函数句柄。由于MATLAB并不要求()使用不需要任何输入的函数,因此表面上看起来与python模块类似(尽管我不知道它会如何影响性能)。

我知道这是颈部疼痛。 mathworks没有理由不允许将文件用作目前为文件夹执行的包,例如将+放在文件名的开头。但他们没有。

答案 1 :(得分:2)

接近您正在寻找的解决方案可能是使用类。类包含可以是公共(从外部可见)或私有(仅从内部可见)的方法。类的方法的实现可以在multiple files中,也可以在同一文件中。

这是一个简单的例子

classdef Class1
    methods (Static)
        function Hello
            disp('hello');
        end

        function x = Add(a,b)
            x = Class1.AddInternal(a,b);
        end
    end

    methods (Static, Access=private)
        function x = AddInternal(a,b)
            x = a+ b;
        end
    end
end

使用示例 - :

>> Class1.Hello
hello
>> Class1.Add(1,2)

ans =

     3

>> Class1.AddInternal(2,3)
Error using Class1.AddInternal
Cannot access method 'AddInternal' in class 'Class1'.