2013-10-21 2 views
0

함수 B에서 함수 B를 호출하는 함수 A가 있습니다. 함수 A를 종료하려고합니다. 주요 문제는 함수 A가 실행되지 않는 경우에만 함수 B가 실행될 수 있다는 것입니다. 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

요청할 수있는 경우, 이것을 위해 무엇이 필요합니까? –

+0

"업데이트 A"는 A가 글로벌 상태임을 나타내므로 글로벌 사용 중임을 나타냅니다. (예 : http://en.wikipedia.org/wiki/Code_smell) 변수가 맞습니까? –

답변

0

B (필요한 경우)을 호출 한 후 A에 문을 실행하지 않는 것 같습니다. 이것은 다음 코드로 쉽게 할 수 있습니다.

function A 

terminate = B; 
if terminate == true 
    return 
end 

end 

function terminate = B 

terminate = true; 

end 
+0

유효한 해결 방법이지만 일정한 반환은 다소 이상합니다. 종료는 항상 참이면 함수 A를'B; return'으로 줄일 수 있습니다. – Daniel

+0

@DanielR : 예를 들어. 나는 OP가'A'를 끝내기를 원하지 않는다면'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

아니요. A는 정말로 종결되어야합니다. B는 일부 변수뿐만 아니라 스크립트 (즉, .m (또는이 경우 독립 실행 형 파일로 .exe) 파일 자체)를 업데이트해야합니다. 파일을 업데이트하는 유일한 방법은 파일이 실행되고 있지 않을 때입니다. – user2894107

+0

웨더'A '는 독립 실행 형 .exe이거나 .m- 파일은 상당한 차이가 있습니다. 독립형 exe 인 경우, 현재 업데이트 된 .exe에'system' 호출을하고 현재의 MATLAB 세션에'exit()'를 호출하면됩니다. – sebastian

관련 문제