2017-04-04 44 views
0

我想在幾個包中構建我的項目。每個軟件包應該是每個自己的命名空間(以避免衝突的文件名),但是在一個軟件包中,我希望所有文件都位於同一個命名空間中(而不必將所有文件放在同一個文件夾中;我想要不同的文件夾)。包matlab中的引用函數

在實踐中,我想這種結構

Project 
    main.m 
    commonLibrary 
    +part1Project 
     mainPart1.m 
     otherFolder 
      supportFile.m 
    +part2Project 
     mainPart2.m 
     otherFolder2 
      supportFile2.m 

這是品行我想:

  • 當main.m文件,我可以調用公共庫的一切,一切都在任何子-project,包括子文件夾內的功能。所以我想打電話給part1Project.supportFile
  • 在mainPart1.m中,我想調用支持文件而不使用當前包的前綴(即我想直接調用supportFile)
  • 當在mainPart2中,I要直接調用supportFile2。如果我想訪問項目第一部分中的文件,我可以調用part1Project.supportFile。

當前的設置是我將項目文件夾和所有子文件夾添加到matlab路徑。但這意味着

  • 我不能從任何地方調用supportFile;不從主(part1Project.supportFile將無法正常工作),甚至沒有從mainPart1(supportFile無法找到)
  • 以同樣的方式很多,很難從part2Project

如何訪問part1Project的元素我能達到我想要的行爲嗎?

回答

1

您不能訪問包的子文件夾內的功能,除非該子文件夾是private folder,在這種情況下,它只能被直接父文件夾中的功能訪問。

如果確實使用private文件夾方法,則可以使用包含文件夾中的函數調用此private文件夾中的函數,而無需使用完全限定的軟件包名稱。

您的佈局看起來像:

Project 
    main.m 
    commonLibrary 
    +part1Project 
     mainPart1.m 
     private 
      supportFile.m 
    +part2Project 
     mainPart2.m 
     private 
      supportFile2.m 

你的第一點會工作,但其他兩個意志。沒有內置的方法來完成第一點。

另一種選擇是在每個包中的所有函數中使用import語句,以便它在函數的開頭導入所有包成員。

您的佈局看起來像

Project 
    main.m 
    commonLibrary 
    +part1Project 
     mainPart1.m 
     supportFile.m 
    +part2Project 
     mainPart2.m 
     supportFile2.m 

mainPart1.m內容(任何任何功能)看起來是這樣的:

function mainPart1() 
    % Import the entire namespace 
    import part1Project.* 

    % No package name required 
    supportFile() 
end 

然後從main你可以訪問supportFile

function main() 
    part1Project.supportFile() 
end 
+0

謝謝你的回答!因此,無論是使用私人文件夾(無法調用包之外的函數),還是將所有內容都放在包中的相同文件夾中,然後在mainPart1的開始處使用導入。我不介意使用導入,但我真的希望通過爲每組函數使用子文件夾來保持包的整潔。所以沒有辦法做到這一點?或者我可以創建子包,以便我可以調用part1Project.subpart1.supportfile? – Ant

+0

@Ant是那些是可能的路線。子包將是另一種選擇。毋庸置疑,MATLAB的軟件包功能可能會進行重大改進。還值得注意的是'私人'文件夾不能包含類 – Suever

+0

它確實看起來像它。非常感謝 :) – Ant