包matlab中的参考函数

时间:2017-04-04 14:44:02

标签: matlab namespaces editor projects-and-solutions

我想在几个包中构建我的项目。每个包应该是每个自己的命名空间(以避免文件名冲突)但在包中,我希望所有内容都在同一个命名空间中(不必将所有文件放在同一个文件夹中;我想要不同的文件夹)。

在实践中我想要这个结构

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

这是我想要的行为:

  • 在main.m中,我可以调用公共库中的所有内容以及任何子项目中的所有内容,包括子文件夹中的函数。所以我想调用part1Project.supportFile
  • 在mainPart1.m中,我想在不使用当前包的前缀的情况下调用支持文件(即我想直接调用supportFile)
  • 在mainPart2中,我想直接调用supportFile2。如果我想访问项目第1部分中的文件,我可以调用part1Project.supportFile。

当前设置是我将Project文件夹和所有子文件夹添加到matlab路径。但这意味着

  • 我无法从任何地方拨打supportFile;不是来自main(part1Project.supportFile将无法工作),甚至不能从mainPart1(无法找到supportFile)
  • 以同样的方式,很难从part2Project访问part1Project的元素

我如何实现我想要的行为?

1 个答案:

答案 0 :(得分: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