我有一个实时脚本(main.mlx),正在调用另外两个实时脚本(sub1.mlx,sub2.mlx)。我希望在自己调用下标时显示输出,而不是在调用主脚本时显示输出,尽管我想在主脚本中显示某些内容。我试图在主脚本的下标调用后面加上分号。
最少的工作示例
main.mlx:
clear vars
sub1;
sub2;
sub1.mlx:
syms A1 B1
A1 = B1
sub2.mlx:
syms A2 B2
A2 = B2
预期输出: 没有
输出:
我尝试过的事情(失败):
clear vars
run('sub1.mlx');
run('sub2.mlx');
答案 0 :(得分:3)
一种解决方案是:
clear vars
out1=evalc('sub1');
out2=evalc('sub2');
其中out1和out2是可选的以捕获输出。
答案 1 :(得分:1)
以下黄金法则可以应用于任何MATLAB编码,并且在此处适用
始终使用
;
取消显示分配,并在需要时分别显式显示变量。
在这种情况下,我们可以执行以下操作:
在main.mlx
内,我们写
% Call the sub scripts without output
bDisp = false;
sub1;
sub2;
在sub1.mlx
和sub2.mlx
内,您可以将输出结构更明确
% By default (when running this script alone), display things
if ~exist( 'bDisp', 'var' )
bDisp = true;
end
syms A1 B1
% Terminate the assignment with a semi-colon to suppress output
A1 = B1;
% Explicitly display A1 here (if bDisp is enabled)
if bDisp
A1 % disp(A1) would be even more verbose, but doesn't show "A1 = "
end
此方法使您可以控制何时显示内容,而不管从何处调用它们。
如果需要,可以使默认检查(在sub1.mlx
/ sub2.mlx
的顶部)更加复杂。例如,您可以使用dbstack
来确定从何处调用执行代码(即哪个函数),但是实时脚本在堆栈中显得有些古怪。