Как я подавляю строки кода внутри одной функции, когда эта функция вызывается из другой функции?

У меня есть две функции, одна вызывается из другой. Я хочу, чтобы определенные части первой функции не выполнялись при вызове из второй функции.

function vvec = vecVelocity(varargin);
%must be preceded with a 'syms var real' declaration where var is
%the parameter of your vector function

if nargin > 1 & nargin < 3
   r = [sym(varargin(1:end))];
elseif nargin > 3 
    disp('too many inputs')
    return
else r = [sym(varargin(1))];
end

if length(r) < 3
    r = [r,0];
end

dr = diff(r);
uT = vecUnitTan(r);
speed = sqrt(sum(dr.^2));
v = speed*uT;
vvec = matlabFunction(v);
disp(['Simplified Symbolic Form: ' char(simplify(sym(vvec)))]);

Я бы хотел, чтобы эта последняя строка disp(...) не появлялась при вызове следующей второй функции из командного окна.

function speed = vecSpeed(r);
%must be preceded with a 'syms var real' declaration where var is
%the parameter of your vector function

v = sym(vecVelocity(r));
sp = sqrt(sum(v.^2));
speed = matlabFunction(sp);
disp(['Simplified Symbolic Form: ' char(simplify(sym(speed)))]);

В данный момент вызов функции vecSpeed ​​приводит к отображению группы операторов из других предыдущих функций, которые вызываются из функции vecSpeed ​​(и некоторых из них, которые вызываются из функции vecVelocity), но я хочу только disp(...) оператор из вызываемой функции vecSpeed, а не любой другой.

1 ответ

Решение

В первой функции вы можете поместить блок кодов в

if numel(dbstack) == 1
  % Your code block
end

чтобы предотвратить их выполнение, если функция не вызывается непосредственно из окна командной строки.

Другой способ - проверить наличие таких переменных, как debug_1, debug_2 и т.д., которые вы можете передать из 2-й функции при вызове 1-й функции.

Другие вопросы по тегам