我正在寻找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)
当我运行analyze.m时,我想只有plot(c)
而不是任何其他。
答案 0 :(得分:3)
您可以使用'dbstack' [1]查看函数调用。
答案 1 :(得分:2)
我不知道这是否可以在MATLAB中实现。解决方法是将if
与exist
一起使用,如下所示:
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 :(得分:2)
补充@tashuhka答案(即使用dbstack),并且根据您是否要将变量保留在全局范围内,另一种解决方案是将您的脚本转换为函数并将可选参数传递给'分析.M'
function [] = foo(doDebugPlot)
%[
% Check params
if (nargin < 1), doDebugPlot = true; end
% Code
...
% Debug
if (~doDebugPlot), return; end
plot(lala);
plot(tutut);
%]