包 matlab 中的参考函数
Reference function within package matlab
我想在几个包中构建我的项目。每个包都应该有自己的命名空间(以避免文件名冲突),但在一个包内,我希望所有内容都在同一个命名空间中(不必将所有文件放在同一个文件夹中;我想要不同的文件夹)。
实际上我想要这个结构
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.
目前的设置是我将项目文件夹和所有子文件夹添加到matlab路径。但这意味着
- 我无法从任何地方调用 supportFile;不是来自 main(part1Project.supportFile 将不起作用)甚至不是来自 mainPart1(无法找到 supportFile)
- 以同样的方式,很难从 part2Project 访问 part1Project 的元素
我怎样才能实现我想要的行为?
您不能访问包的子文件夹中的函数,除非该子文件夹是 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
我想在几个包中构建我的项目。每个包都应该有自己的命名空间(以避免文件名冲突),但在一个包内,我希望所有内容都在同一个命名空间中(不必将所有文件放在同一个文件夹中;我想要不同的文件夹)。
实际上我想要这个结构
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.
目前的设置是我将项目文件夹和所有子文件夹添加到matlab路径。但这意味着
- 我无法从任何地方调用 supportFile;不是来自 main(part1Project.supportFile 将不起作用)甚至不是来自 mainPart1(无法找到 supportFile)
- 以同样的方式,很难从 part2Project 访问 part1Project 的元素
我怎样才能实现我想要的行为?
您不能访问包的子文件夹中的函数,除非该子文件夹是 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