发布R2016a之前,出版是在 MATLAB中的方式来记录一个脚本的结果.我发现当我手动运行脚本时,我经常pause
在整个脚本中放置命令.有没有一种简单的方法来确定脚本是否已发布?然后,我可以将我的暂停包含在一些代码中:
if isNotPublishing
pause();
end
Run Code Online (Sandbox Code Playgroud)
我的google foo让我无法找到解决方案.
一个简单的方法是查看是否publish
在调用堆栈中.dbstack
将返回一个struct
s 数组,指示调用哪些函数以什么顺序到达我们调用的点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)
归档时间: |
|
查看次数: |
79 次 |
最近记录: |