0

我正在编写一个 matlab 脚本,我想知道该脚本的名称,这是一个步骤。我需要这个的原因是我正在编写一个帮助脚本,以便在进行更重的计算之前断言有关工作区的一些基本事实,并且帮助脚本应该能够在调用计算脚本时给出错误消息。

我试过使用mfilenameand dbstack,但除了帮助脚本的名称之外,我什么也没有得到。

为了进一步解释,我有以下脚本:

  • verify_base_conditions: 辅助脚本,在第一行中的一个调用
  • heavy_stuff_calculation
  • sweet_mother_of_algorithms.
  • general_entry_point:我在单元格中收集常见工作流程的脚本

我尝试使入口点脚本尽可能小,并将较重的计算(或实际上需要多于几行的任何东西)重构为基于任务的、可重用的脚本。如果我从入口点脚本调用sweet_mother_of_algorithms并且该脚本运行的基本条件不满足,我希望看到一条错误消息,例如

Error: this_cool_var must be defined when running sweet_mother_of_algorithms
general_entry_point line 15

我尝试使用

error(['this_cool_var must be defined when running ' mdfilename])

和其他类似的构造,但我不能让错误消息说除了verify_base_conditions.

如何找到在堆栈中上一级运行的脚本的名称?

(注意:我对查找在堆栈底部运行的脚本感兴趣- 几乎总是. 我只是对获取调用的脚本的名称感兴趣。)general_entry_pointverify_base_conditions

4

1 回答 1

1

dbstack应该为此工作。我认为这与您的设置类似:

a.m:
  b;

b.m:
  c;

c.m:
  stack = dbstack;
  for i=1:3
    disp(stack(i));
  end

当我运行时a;,这会打印出整个堆栈,包括b(我认为这是您想要的 - 调用堆栈上的第二个顶部项目。

或者,尽管这可能给出完全相同的结果,但您可以抛出并捕获错误并查看其堆栈:

c.m:
  try
    error('What is on the call stack?');
  catch e
    for i=1:3
      disp(e.stack(i));
    end
  end
于 2012-04-11T13:53:20.740 回答