我的实验室里有很多MATLAB代码。问题是没有办法来组织它。由于所有函数都必须位于同一个文件夹中(或者你必须在MATLAB的path
环境变量中添加一堆文件夹),所以我们注定要在同一个文件夹中加载多个文件,全局命名空间。有没有更好的方法来组织我们的文件和功能?我真的希望有某种模块系统...MATLAB最接近命名空间的是什么?
回答
MATLAB有一个可以嵌套的包的概念,包括类和函数。
只要在+
的第一个字符(如+mypkg
)的路径上的某个地方制作目录。然后,如果该目录中存在类别或功能,则可以将其称为mypkg.mything
。您也可以使用import mypkg.mysubpkg.*
从包中导入。
关于将一堆函数移动到一个包中的一个主要问题是函数和类不会自动导入它们所在的包,它们的编号为。这意味着如果你有一堆函数在不同的m文件中互相调用,你可能不得不花费一些时间在函数调用中调用import
。不要忘记把导入到子功能,并呼吁。更多信息:
http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html
我没有看到必须添加一些文件夹到Matlab的搜索路径的问题。我修改了startup.m
,以便递归查找我的Matlab启动目录中的目录,并将它们添加到路径中(它也对所有内容运行svn update
)。这样,如果我改变目录结构,Matlab仍然会在下次启动它时看到所有的功能。否则,您可以查看面向对象的代码,将所有方法存储在@objectName文件夹中。但是,这可能会导致许多重写代码,通过更新路径可以避免(如果将文件夹添加到File
菜单的路径中,甚至有一个按钮add with subfolders
),并执行一些移动代码。
编辑
如果你想组织你的代码,使一些功能只对那些直接调用这些功能可见(如果你不想重新写于OOP),你将调用函数放在一个目录中,并在该目录中创建一个名为private
的子目录。那里的函数只对父目录中的函数可见。如果您必须为一部分代码重载一些内置的Matlab函数,这非常有用。
另一种方式来组织&重用代码使用MATLAB的面向对象的特性。每个对象通常位于一个以“@”开头并具有该类内部文件的文件夹中。 (虽然较新的语法不需要在单个文件中定义的类)。使用类文件夹内的私人文件夹,matlab甚至支持私有类成员。 Matlab的new class notation功能比较全面,但即使是old syntax也很有用。
顺便说一下,我的startup.m
检查了我做我的SVN签出到一个众所周知的位置,并将所有子文件夹自动添加到我的路径。
包系统可能是最好的。我使用类系统(@ClassName文件夹),但我实际上编写对象。如果你不这样做,写一堆静态方法真是愚蠢。有一点可以帮助你将所有的matlab代码放到一个不在matlab路径中的文件夹中。然后,您可以选择性地将所需的代码添加到路径中。
所以说你有两个项目,存储在“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
当然,你可以扩展这方面的一个明显的扩展将包括在每个目录下的文本文件,说什么其他的目录应该被添加到使用的路径。功能在该目录中
如果您共享代码,另一个有用的事情是设置一个“用户特定/ LabMember”目录结构,其中您有不同的实验室成员保存代码他们正在努力。这样,如果你需要它,你可以访问他们的代码,但是当他们写一个和你自己的名字相同的函数时不会被破坏。
- 1. XAML命名空间的最佳命名约定是什么?
- 2. 在Matlab中最接近R的nlminb的近似值是什么?
- 3. IMvcServiceLocator的命名空间是什么?
- 4. testng.xml的命名空间是什么?
- 5. DispatcherTimer类的命名空间是什么?
- 6. 什么是aerospike中的命名空间
- 7. 什么是CreateIfNotExists的命名空间?
- 8. NUnit CollectionAssert的命名空间是什么?
- 9. 什么是groovyx命名空间?
- 10. 什么是OpenCV HighGUI命名空间?
- 11. 什么是DomDocument命名空间?
- 12. 什么是MapRoute命名空间参数?
- 13. 什么是ksoap命名空间?
- 14. 什么是命名空间,XPath轴
- 15. 什么是“kube-system”命名空间?
- 16. 命名空间是什么?用法呢?
- 17. 什么是VJSharp命名空间?
- 18. 命名空间AMD模块的最佳途径是什么?
- 19. 二元运算符的最佳命名空间是什么?
- 20. 什么是接近从头开始创建公司的.Net框架命名空间的最佳方式?
- 21. 什么是IService接口的命名空间?
- 22. XSL - 什么是命名空间?它是什么?
- 23. 什么是命名空间URI Constant.NamespaceSpecNS代表什么?
- 24. 最接近的元素MATLAB
- 25. 检查url命名空间是否唯一的最佳方法是什么?
- 26. 命名空间名称空间控制器还有什么?
- 27. C++命名空间....匿名命名空间是合法的?
- 28. JQuery..find最接近的空间和
- 29. 属于覆盖命名空间的命名空间会发生什么?
- 30. 什么是最接近YUI的DataTable的jQuery近似?
另请参见http://stackoverflow.com/questions/2326609/how-to-organize-matlab-code – 2010-05-01 00:38:15