Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 以编程方式确定脚本是否正常发布或执行_Matlab_Publish - Fatal编程技术网

Matlab 以编程方式确定脚本是否正常发布或执行

Matlab 以编程方式确定脚本是否正常发布或执行,matlab,publish,Matlab,Publish,在R2016a发布之前,是在MATLAB中记录脚本结果的方法。我发现当我手动运行脚本时,我经常在整个脚本中放置pause命令。有没有一种简单的方法来确定脚本是否正在发布?然后,我可以用一段代码来包装我的暂停,比如: if isNotPublishing pause(); end 我的google foo未能找到解决方案。一个简单的方法是查看调用堆栈中是否有publishdbstack将返回一个structs数组,指示调用哪些函数的顺序是为了到达调用dbstack的点。我们可以使用nam

在R2016a发布之前,是在MATLAB中记录脚本结果的方法。我发现当我手动运行脚本时,我经常在整个脚本中放置
pause
命令。有没有一种简单的方法来确定脚本是否正在发布?然后,我可以用一段代码来包装我的暂停,比如:

if isNotPublishing
    pause();
end

我的google foo未能找到解决方案。

一个简单的方法是查看调用堆栈中是否有
publish
dbstack
将返回一个
struct
s数组,指示调用哪些函数的顺序是为了到达调用
dbstack
的点。我们可以使用
name
属性告诉我们所有这些函数的名称,并查看
publish
是否在其中。如果是,那么我们假设脚本是通过
publish
调用的

stack = dbstack;
isBeingPublished = ismember('publish', {stack.name});
或者如果你想让它成为一条直线

isBeingPublished = ismember('publish', cellfun(@(x)x.name, dbstack, 'UniformOutput', 0));
无论您是使用publish工具栏发布脚本,还是使用

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

回答得好!对任何不太熟悉MATLAB的人的评论/警告。MATLAB允许您使用更少的字母来唯一识别它们。因此,
uni,0
UniformOutput,false
的缩写。陷阱是:如果Mathworks决定他们想要一个
统一输入
唯一输出
通用
或类似的东西,那么所有具有
统一
的代码都将失败。因此,我建议您始终花时间为参数对编写完整的名称。@StudieGriffin Great point。出于习惯,我总是使用
'uni'
,但我肯定会努力把它说清楚。谢谢。在我的matlab库启动函数中,我有:cu=@(f,x)cellfun(f,x,'UniformOutput',false);我第一次读到这个答案时,我不喜欢的是对builtin的聪明调用,它为mypause包装器处理varargin。非常圆滑。这解决了我遇到的其他一些问题。你现在已经回答了我的两个问题!