【问题标题】:Reference function within package matlabmatlab 包中的引用函数
【发布时间】:2017-04-04 14:44:02
【问题描述】:

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

实际上我想要这种结构

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 的元素

我怎样才能实现我想要的行为?

【问题讨论】:

    标签: matlab namespaces editor projects-and-solutions


    【解决方案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
    

    【讨论】:

    • 感谢您的回答!因此,要么我使用私有文件夹(无法调用包外的函数),要么我将所有内容放在包的同一个文件夹中,然后在 mainPart1 的开头使用导入。我不介意使用导入,但我真的很想通过为每组函数使用子文件夹来保持包的整洁。那么有没有办法呢?或者我可以创建子包,以便我可以调用 part1Project.subpart1.supportfile?
    • @Ant 是的,这些是可能的路线。子包将是另一种选择。毋庸置疑,MATLAB 的软件包功能可能需要大修。另外值得注意的是private文件夹不能包含类
    • 看起来确实像。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多