【问题标题】:How to get the fully-qualified name of the currently executing function?如何获取当前正在执行的函数的全称?
【发布时间】:2018-10-30 04:45:41
【问题描述】:

假设我有:

+MyPackage/+MySubPackage2/some_function.m

当它执行时,如何从这个some_function.m 中生成字符串'MyPackage.MySubPackage2.some_function'

  • mfilename()dbstack()what()等都给'some_function'
  • meta.package.fromName 需要我们所追求的字符串作为其输入
  • 解析完整路径 (mfilename('fullpath')) 或 meta.package.getAllPackages() 等似乎是唯一的方法...

似乎在package 内的class 中调用mfilename('class') 给出了正确的答案,但对于普通函数没有等价物...

...或者有吗?感觉好像我错过了一些明显的东西......

【问题讨论】:

  • 写函数的时候不知道你正在编辑的文件的名字吗? :p
  • @CrisLuengo ...有些时候我确实没有最迷茫的????
  • @jrook 确实。我也可以使用mfilename('fullpath') 获取完整路径,但这不是我想要的 - 我正在寻找您需要在 MATLAB 命令行中键入以调用该函数的确切字符串。
  • 有趣的部分是您需要此信息的原因。也许没有这个可以解决根本问题?
  • @Andy 我“需要”如果出于同样的原因您“需要”mfilenameargv[0]__name__ 等:对重命名的弹性。一致的帮助文本生成。可重复使用的代码,在不同的包中无需任何更改即可正常工作。等等。事实上,也许,对于我眼前的问题,我可以消除这种需要,但在这一点上,这只是好奇!为什么到处都有如此丰富的自省,而当包裹被混在一起时却没有……

标签: matlab package octave introspection


【解决方案1】:

如果可以导入包含的包(比如 p1/p2),那么:

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

this answer 中的方法也可用于(可能进行一些更改)来自动化导入过程。

【讨论】:

  • 我想这是我能得到的最好的,考虑到您链接到的答案(感谢该链接!)您的解决方案的问题是:将此功能移至 +p14/+p45 和代码休息。所以确实看起来,如果不解析完整路径字符串,就无法生成该字符串......听起来像 The MathWorks 有一个洞要填补?
猜你喜欢
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2011-06-13
  • 2012-01-10
相关资源
最近更新 更多