Suppose I have:
+MyPackage/+MySubPackage2/some_function.m
How can I generate the string 'MyPackage.MySubPackage2.some_function'
from within this some_function.m
when it's executing?
mfilename()
, dbstack()
, what()
, etc. all just give 'some_function'
meta.package.fromName
requires the string we're after as its inputmfilename('fullpath')
) or meta.package.getAllPackages()
etc. seems to be the only way...Seems that calling mfilename('class')
in a class
inside a package
gives the right answer, but there's no equivalent for plain functions...
...or is there? Feels like I'm missing something obvious...
If it is possible to import the containing package (say p1/p2), then:
function outputArg1 = some_function()
import p1.p2.*
t = @some_function;
func2str(t)
%ans = 'p1.p2.some_function'
outputArg1 = ...;
end
The method in this answer may also be used (with some changes possibly) to automate the import process.