我的實驗室裏有很多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