Matlab功能类似于Python的__name__=='__main__'

3
我正在寻找Matlab功能,以区分脚本是直接运行还是从另一个脚本运行。
我编写了一个脚本,在其中声明要处理的数据,并在其他脚本和函数中使用这些数据。当我直接运行此脚本时,我想绘制这些数据的图形。当我从另一个脚本调用此脚本时,我不想有所有这些绘图。
在Python中,我可以构建一个用于绘图的函数,并仅在__name__=='__main__'时调用此函数,但我无法找到如何在Matlab中实现此功能。
例如:
data.m
a = [1 2 3 4 5]
b = sin(a)
% plot only if run directly
figure
plot(a,b)

analysis.m

data
c = a.^2
figure
plot(c)

当我运行analysis.m时,我只想要plot(c),而不是其他任何内容。
3个回答

3
你可以使用 ´dbstack´ [1] 命令来查看函数调用。

2

我不知道在MATLAB中是否可能实现这一点。一种解决方法是使用ifexist结合起来,像这样:

analysis.m

run_data = 1;
data
c = a.^2
figure
plot(c)

data.m

a = [1 2 3 4 5]
b = sin(a)
% plot only if run directly
if ~exist('run_data','var')
   figure
   plot(a,b)
end

2
为了补充@tashuhka的答案(即使用dbstack),并且根据您是否想要在全局范围内保留变量,另一个解决方案是将脚本转换为函数,并向'analysis.m'传递可选参数。
function [] = foo(doDebugPlot)
%[
    % Check params
    if (nargin < 1), doDebugPlot = true; end

    % Code
    ...

    % Debug
    if (~doDebugPlot), return; end

    plot(lala);
    plot(tutut); 
%]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接