Can I have subdirectories in a +package directory?
34 views (last 30 days)
Show older comments
Richard Crozier
on 20 Mar 2015
Commented: Jim Svensson
on 14 May 2019
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 Comments
Jim Svensson
on 14 May 2019
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);
Accepted Answer
More Answers (2)
Philip Joergensen
on 15 Nov 2018
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 Comments
Michael Häußler
on 15 Nov 2018
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:
See Also
Categories
Find more on Search Path in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!