事實上,我不知道你應該經常重新命名你的軟件包。在我看來,package in MATLAB背後的全部想法是將一組相關函數和類組織到一個集合中,您可以輕鬆使用或分發爲「工具箱」,而不必擔心名稱衝突。因此,將函數和類放入包中就像最後的步驟,您可以執行一個很好的拋光工具集合,因此您應該沒有太多理由來重命名包。而且,你只需要在包裝函數調用前加上一個包名即可。
...(停下來想,如果有什麼我要建議的是一個好主意;))...
但是,如果你真的想避免必須經過你包和prepend你的函數調用一個新的包名,一種方法是使用函數MFILENAME獲取當前正在運行的包函數的完整文件路徑,解析路徑字符串以查找父包目錄(以「+」 「),然後將結果傳遞給IMPORT函數以導入父包。你甚至可以將這些步驟,在一個單獨的功能packagename
(要求您同時使用的功能EVALIN):
function name = packagename
callerPath = evalin('caller','mfilename(''fullpath'')'); %# Get full path of
%# calling function
name = regexp(callerPath,'\+(\w)+','tokens'); %# Parse the path string to get
%# package directories
name = strcat([name{:}],... %# Format the output
[repmat({'.'},1,numel(name)-1) {''}]);
name = [name{:}];
end
然後你可以把這個在你的包的功能一開始就自動讓他們包括他們的父母包名稱空間:
import([packagename '.*']);
這是個好主意嗎?那麼,我不確定計算的影響會是什麼,如果你在做這個你每次調用一個包函數。另外,如果您有嵌套包內包你會得到輸出packagename
看起來像這樣:
'mainpack.subpack.subsubpack'
而且調用IMPORT將只包括直接父包subsubpack
。如果您還想包含其他父包,則必須從上面的字符串中順序刪除最後一個包,並導入字符串的其餘部分。
總之,這是不是一個非常乾淨解決方案,但它是可能使你的包很容易就能以這種方式重新命名。然而,我仍然認爲最好將創建包視爲創建核心工具集的過程中的最後一步,在這種情況下,重命名應該是不太可能的場景,並且將包名調用爲包名只需要做一次。
在文件的開頭調用* import *應該完成這項工作。查看文檔[import](http://www.mathworks.de/help/techdoc/ref/import.html)瞭解更多信息。 – zellus 2011-04-12 13:10:43
@zellus:謝謝,我已經嘗試過了 - 我必須在程序包中包含'import mypackage。*'到_every_函數(導入在函數工作區中,而不是全局函數),並且當我決定重命名包:( – 2011-04-12 13:16:41