Удивительный вывод при вызове прямого сценария Matlab из другого прямого сценария - PullRequest
4 голосов
/ 02 июля 2019

У меня есть живой скрипт (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 ]

3 голосов
/ 02 июля 2019

Одно из решений:

clear vars
out1=evalc('sub1');
out2=evalc('sub2');

, где out1 и out2 необязательны для перехвата вывода.

1 голос
/ 02 июля 2019

Следующее золотое правило может быть применено к любой кодировке 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, чтобы определить, откуда был вызван исполняемый код (то есть, из какой функции), но в реальном времени сценарии становятся немного интереснее со стеком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...