Как получить полное имя выполняемой в данный момент функции? - PullRequest
0 голосов
/ 30 октября 2018

Предположим, у меня есть:

+MyPackage/+MySubPackage2/some_function.m

Как я могу сгенерировать строку 'MyPackage.MySubPackage2.some_function' из этого some_function.m при ее выполнении?

  • mfilename(), dbstack(), what() и т. Д. Все просто дают 'some_function'
  • meta.package.fromName требует строку, которую мы ищем, в качестве ввода
  • парсинг полного пути (mfilename('fullpath')) или meta.package.getAllPackages() и т. Д. Кажется единственным способом ...

Кажется, что вызов mfilename('class') в class внутри package дает правильный ответ, но нет эквивалента для простых функций ...

... или есть? Такое ощущение, что я упускаю что-то очевидное ...

1 Ответ

0 голосов
/ 30 октября 2018

Если возможно импортировать содержащий пакет (скажем, p1 / p2), тогда:

function outputArg1 = some_function()
import p1.p2.*
t = @some_function;
func2str(t)
%ans  = 'p1.p2.some_function'
outputArg1 = ...;
end

Метод из этого ответа также можно использовать (возможно, с некоторыми изменениями) для автоматизации процесса импорта.

...