假设我有一些使用某些函数的MATLAB代码。 我不想在与使用的代码相同的文件中定义函数 功能。
另一方面,为每个函数制作m文件的解决方案对我来说也不好,因为我不想要很多文件。 我想要的是类似于包含这些函数的utils文件,例如,我可以像在python中那样导入函数。
你会推荐什么?
答案 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'.