2017-04-04 40 views
0

プロジェクトをいくつかのパッケージで構造化したいと思います。各パッケージはそれぞれの名前空間でなければなりませんが(ファイル名の衝突を避けるために)、パッケージ内ではすべて同じ名前空間にすべてのファイルを置く必要があります(同じフォルダ内にすべてのファイルを置く必要はありません。パッケージ内の参照関数matlab

  • するとmain.mで、私は、任意のサブに共通ライブラリのすべて、すべてを呼び出すことができます。私はこのような構造

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

    これをしたいと思います実際に

    は、私が希望behaviousですサブフォルダ内の関数を含む-project。そこでpart1Project.supportFileを呼びたい
  • mainPart1.mでは、現在のパッケージの接頭辞を使わずにサポートファイルを呼び出す(つまり、私はsupportFileを直接呼び出したい)
  • mainPart2でsupportFile2を直接呼びたいと思っています。プロジェクトのパート1のファイルにアクセスしたい場合は、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のパッケージ機能は大幅なオーバーホールを使用する可能性があります。 'private'フォルダにはクラスを含めることはできません。 – Suever

+0

確かにそれはそうです。どうもありがとう :) – Ant

関連する問題