2013-10-21 66 views
0

我有一個函數A,它將從函數B調用函數B,我想終止函數A. 主要問題是函數B只能在函數A不運行時才能運行。 我知道沒有像ctr + c版本的腳本,但這不是我想要的,因爲它不是需要終止的函數本身,而是一個不同的函數。有沒有辦法做到這一點?Matlab:從另一個函數終止函數

**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能夠運行。所以「B; return」是不可能的。 (感謝到目前爲止,所有的答案)

+3

這是不可能的。任何退出功能A的方法也將退出B並返回到A的調用者。 – Daniel

+0

如果我可能會問,你需要什麼?如果你問我,它會[有點臭](http://en.wikipedia.org/wiki/Code_smell)... –

+0

「更新A」似乎表明A有一個全局狀態,所以你使用全局變量,是否正確? –

回答

0

看來你真正想要的是,來電後不執行在A語句B(如果需要)。這很容易用下面的代碼完成。

function A 

terminate = B; 
if terminate == true 
    return 
end 

end 

function terminate = B 

terminate = true; 

end 
+0

一個有效的解決方法,但不斷返回是奇怪的。如果終止始終爲真,則函數A可以簡化爲「B;返回」。 – Daniel

+0

@DanielR:只是一個例子;如果他不想結束'A',我假設OP會將'terminate'設置爲'false'。 – Jacob

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的自更新應用程序。

+0

沒有。真的需要終止。 B需要更新腳本(即.m(或者在這種情況下作爲獨立的.exe)文件本身)而不僅僅是一些變量。更新文件的唯一方法是當它沒有運行時。 – user2894107

+0

Wether'A'來自獨立的.exe或.m-文件,它們有很大不同。對於獨立的exe文件,你可以簡單地對現在更新的.exe和exit()當前的matlab會話發出一個'system'調用。 – sebastian

相關問題