Can I have subdirectories in a +package directory?

조회 수: 39 (최근 30일)
Richard Crozier
Richard Crozier 2015년 3월 20일
댓글: Jim Svensson 2019년 5월 14일
I would like to know if it is possible to add subdirectories to a matlab package directory (denoted by a preceeding '+' in the directory name). Often I want to split up my functions within a package into logical units in directories, but without needing them to each have their own subnamespace. In other words, is it possible to have:
/+pkg/toplevelfun.m
/+pkg/subdir/lowerlevelfun.m
and have both called in my matlab code as:
pkg.toplevelfun
pkg.lowerlevelfun
My tests indicate this is not possible (at least in 2014a). Is this impossible, and if so, is there some technical reason it could not be implemented by TMW?
  댓글 수: 2
Michael Häußler
Michael Häußler 2018년 7월 17일
I am looking for the same feature as you! This would give me the opportunity to make my packages a lot clearer in their arrangement.
Come on Matlab Team ;)
Jim Svensson
Jim Svensson 2019년 5월 14일
The mechanism you want does not exist. But you achieve a similar thing by putting the differrent folder groups first and multiple packages of the same name inside, like so:
<root>/utils/+pkg_foo/find_data.m
<root>/apps/+pkg_foo/plot_data.m
addpath/genpath(<root>))
d = pkg_foo.find_data();
pkg_foo.plot_data(d);

댓글을 달려면 로그인하십시오.

채택된 답변

Richard Crozier
Richard Crozier 2018년 11월 19일
The answer is no, you cannot have subdirectories in a package directory.

추가 답변 (2개)

Philip Joergensen
Philip Joergensen 2018년 11월 15일
Not sure why it does not make sense to place both functions in the root of the package in the case you describe.
I figured out, if you do not mind having a namespace for each subdirectory, you can have subpackages in your package:
/+pkg/toplevelfun.m
/+pkg/+subpkg/lowerlevelfun.m
And then calling the lowerlevelfun would be
pkg.subpkg.lowerlevelfun(...)
Which seems to make good sense in this use case, as it is easy to group functions into easy to remember and meaningful namespaces.
  댓글 수: 3
Philip Joergensen
Philip Joergensen 2018년 11월 15일
That is reasonable, each to their own.
It just does not seem to me to be the best practice/most logical step to group functions in a structure not used consistently.
Organizing a function into
+pkg/<some_path_to_function_dir>/lowerlevelfunc.m
called by
pkg.lowerlevelfunc(...)
makes it take effort to figure out the location of the function. Also, it begs the question how should functions with the same name be handled.
Richard Crozier
Richard Crozier 2018년 11월 19일
Do you mean effort for the user? The user can just do
which('pkg.lowerlevelfunc')

댓글을 달려면 로그인하십시오.


Michael Häußler
Michael Häußler 2018년 11월 15일
There is also the possibility to use private folders within the package. The functions/classes within that folder are however only visible to the files within the package....
Still not what you want exactly, but I actually use that a lot now to have small "helper functions" within the package organized at a different place:
  댓글 수: 1
Richard Crozier
Richard Crozier 2018년 11월 19일
Thanks, yes, I'm also aware of this, but this doesn't do what I want at all, since I want the functions to be available through the package namespace. Even if it did do something like what I wanted, as there can naturally only be one private directory, called 'private' in a package directory, it doesn't really help with organisation in any way.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Search Path에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by