从其他实时脚本调用Matlab实时脚本时,输出过高

时间:2019-07-02 09:27:22

标签: matlab

我有一个实时脚本(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

预期输出: 没有

输出:

enter image description here

我尝试过的事情(失败):

clear vars

run('sub1.mlx');
run('sub2.mlx');

2 个答案:

答案 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.mlxsub2.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来确定从何处调用执行代码(即哪个函数),但是实时脚本在堆栈中显得有些古怪。