在发布R2016a之前,publishing在MATLAB中是 方式来记录脚本的结果。我发现当我手动运行脚本时,我经常在脚本中放置pause
个命令。有没有一种简单的方法来确定脚本是否已发布?然后,我可以将我的暂停包含在一些代码中:
if isNotPublishing
pause();
end
我的google foo让我无法找到解决方案。
答案 0 :(得分:5)
一种简单的方法是查看调用堆栈中是否有publish
。 dbstack
将返回一个struct
数组,表示调用了哪些函数以什么顺序到达我们调用dbstack
的点。我们可以使用name
属性告诉我们所有这些函数的名称,并查看其中是否有publish
。如果是,那么我们假设脚本是通过publish
调用的。
stack = dbstack;
isBeingPublished = ismember('publish', {stack.name});
或者如果你想要一个单行
isBeingPublished = ismember('publish', cellfun(@(x)x.name, dbstack, 'UniformOutput', 0));
无论您是使用发布工具栏还是使用
命令行发布脚本,这都应该有效publish('myscript.m')
如果你想变得非常花哨,你可以重载pause
(或编写你自己的版本,mypause
),为你做这个检查。这是有效的,因为在新的pause
函数中,dbstack
仍会包含publish
,因为您是从脚本调用它,最终由publish
进行评估。如果您创建此功能,那么您在代码中不需要所有逻辑,而只需拨打mypause()
。
function mypause(varargin)
stack = dbstack;
if ~ismember('publish', {stack.name});
builtin('pause', varargin{:})
end
end