MATLAB最接近命名空间的是什么?

我们的实验室里有很多MATLAB代码。 问题是没有办法来组织它。 由于所有函数都必须位于同一个文件夹中(或者你必须在MATLAB的path环境variables中添加一堆文件夹),所以我们注定要在同一个文件夹中加载多个文件,全局命名空间。 有没有更好的方式来组织我们的文件和function? 我真的希望有某种模块系统…

MATLAB有一个嵌套的概念,可以嵌套,包括类和函数。

只要在你的path上用+作为第一个字符,就像+mypkg 。 那么,如果在那个目录中有一个类或函数,它可能被称为mypkg.mything 。 您还可以使用import mypkg.mysubpkg.*从一个包import mypkg.mysubpkg.*

把一堆函数移动到一个包中的一个主要问题是函数和类不会自动导入它们所在的包 。 这意味着如果在不同的m文件中有一堆相互调用的函数,则可能需要花费一段时间来删除import或限定函数调用。 不要忘记把导入到子function,也呼吁。 更多信息:

http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html

我没有看到需要添加一些文件夹到Matlab的searchpath的问题。 我已经修改了startup.m以便recursion查找我的Matlab启动目录中的目录,并将它们添加到path(它也在所有内容上运行svn update )。 这样,如果我改变目录结构,Matlab在下一次启动时仍然会看到所有的function。

否则,您可以查看面向对象的代码,将所有方法存储在@objectName文件夹中。 但是,这可能会导致很多重写代码,通过更新path可以避免这种情况(如果将文件夹添加到File菜单的path中,甚至会有一个add with subfolders添加button),并执行一些移动代码。

编辑

如果你想组织你的代码,这样一些函数只对直接调用它们的函数可见(如果你不想在OOP中重写),你可以把调用函数放在一个目录中,在这个目录中目录中,您创build了一个名为private的子目录。 那里的函数只能在父目录中的函数中看到。 这是非常有用的,如果你必须重载一些内置的Matlab函数的一部分代码。

组织和重用代码的另一种方法是使用matlab的面向对象function。 每个对象通常在一个以“@”开头的文件夹中,并且具有该类中的文件。 (虽然较新的语法不需要在单个文件中定义的类)。使用类文件夹内的私人文件夹,matlab甚至支持私有类成员。 Matlab的新类表示法function比较全面,但是即使是旧的语法也是有用的。

顺便说一下,我的startup.m检查了一个众所周知的位置,我做我的SVN签出,并将所有子文件夹自动添加到我的path。

包系统可能是最好的。 我使用类系统(@ClassName文件夹),但我实际上写对象。 如果你不这样做,写一堆静态方法是愚蠢的。 有一件可以帮助的事情是将所有的matlab代码放到一个不在matlabpath上的文件夹中。 然后,您可以select性地将所需的代码添加到path中。

所以说,你有两个项目,存储在“c:\ matlabcode \ foo”和“c”\ matlabcode \ bar“,都使用常见的代码存储在”c:\ matlabcode \ common“,你可能有一个函数”setupPaths .m“是这样的:

 function setupPaths(projectName) basedir = fullfile('c:', 'matlabcode'); addpath(genpath(fullfile(basedir, projectName))); switch (projectName) case {'foo', 'bar'} addpath(genpath(fullfile(basedir, 'common'))); end 

当然你可以扩展这个。 一个明显的扩展是在每个目录中包含一个文本文件,说明应该将其他目录添加到path中以使用该目录中的function。

如果您共享代码,另一个有用的事情是设置一个“用户特定/ LabMember”目录结构,其中您有不同的实验室成员保存他们正在处理的代码。 这样,如果你需要的话,你可以访问他们的代码,但是当他们写一个和你自己的名字相同的函数的时候不要被破坏。