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