0

我有一个函数 A,它将调用函数 B,函数 BI 想要终止函数 A。主要问题是函数 B 只有在函数 A 不运行时才能运行。我知道没有类似 ctr+c 版本的脚本,但这不是我想要的,因为它不是需要终止的函数本身,而是一个不同的函数。有没有办法做到这一点?

**function A**

B(varargin)

end

**function B(varargin)**

kill_function_A

some more statements

end

让我修改一下,以便更清楚:

**function A**
if some_statement_is_true
B(varargin)
end
much more code

**function B(varargin)**
terminate A
update A (this is the reason why it needs to be terminated)
A (restart A, since it is now updated, I can terminate B within A if it is active)
end

请注意,在 B 能够运行之前,需要终止 A。所以“B; return”是不可能的。(到目前为止感谢所有答案)

4

2 回答 2

0

这会起作用吗:

function A
if some_statement_is_true
  B(varargin)
  return
end
much more code

function B(varargin)
  update A (this is the reason why it needs to be terminated)
  A (restart A, since it is now updated, I can terminate B within A if it is active)
end

它不会“停止” A,但实际上A除了调用之外什么都不做B,这应该会导致或多或少相同的结果。或者,您应该运行B并更新some_statement_is_true

function A

while some_statement_is_true
  B(varargin);
  some_statement_is_true = ...; % make sure this gets updated
end
much more code

function B(varargin)
  update A;
end

编辑:

如果 A 是独立的 .exe,您可以执行以下操作来停止并运行新版本:

function A
if some_statement_is_true
  B(varargin);
  exit();
end
much more code

function B(varargin)
  update A;
  system('A.exe');
end

我已成功将此方案用于需要重新启动 MATLAB 的自我更新应用程序。

于 2013-10-22T06:41:27.937 回答
0

看来您真正想要的是在A调用之后不执行语句B(如果需要)。这很容易通过以下代码完成。

function A

terminate = B;
if terminate == true
    return
end

end

function terminate = B

terminate = true;

end
于 2013-10-21T19:49:37.163 回答