我为某个项目创建了一个Matlab库。图书馆将有一个固定的结构。我想要的是一个特定的m文件,比如...\dir\subdir1\func1.m
,总是会调用另一个文件...\dir\subdir2\func2.m
。我尝试将其放在func1
:
addpath('c:\dir\subdir2')
但它有两个主要缺点:
如果我明天将dir
移到另一台服务器上,它就无法工作
如果以某种方式存在另一个名为func2
的函数的目录,我怎么知道它正在使用哪一个?
你说什么?
答案 0 :(得分:1)
您有几个选择。
使用套餐。这允许您使用特定的目录结构创建命名空间。例如,如果目录func1.m
中有函数+subdir1
,那么您可以使用语法func2.m
从另一个目录中的subdir1.func1(...)
调用此函数,前提是该目录为{ {1}}目录位于MATLAB路径中。有关更多信息,请参阅有关包的MATLAB文档。
使用+subdir1
个功能。解决方案(1)并非100%万无一失。它仍然受到路径修改的影响,并且没有任何东西阻止用户更改路径以在具有相同名称的不同包中调用另一个private
。如果您想要绝对确定调用名为func1
的特定函数,请将其放在名为func1
的调用函数的子目录中。如果路径上有多个具有相同名称的函数,则private
函数优先。在当前示例中,这意味着您将在private
中./dir/subdir2/func2.m
调用func1
。
答案 1 :(得分:0)
您可以将路径添加为相对路径,
addpath ( '../subdir2' )
我所做的是在我的工具箱的根目录中 - 我有代码:
addpath ( genpath ( pwd ) )
这将在您的示例中添加根(dir
)中的所有目录。这本质上是一个安装脚本。
如果您希望可以使用该功能,您仍有可能发生名称冲突:
mfilename
在你的mfile中检查本地目录结构(即它在\dir\subdir2