2011-11-17 3 views
0

fun1, fun2 등의 MATLAB 스크립트가 여러 개 있습니다. 그 중 종속 관계가있을 수 있습니다. 예를 들어, fun1은 fun2를 호출 할 수 있고 fun2는 fun3을 호출 할 수 있습니다.은 "모두 지우기;" in functions

불필요한 변수를 제거하려면 모든 기능의 맨 앞에 "모두 지우기"를 넣어야합니까?

function x1 = fun1(input1) 
clear all; 
... 

유용한 변수 제거와 같은 잠재적 문제가 발생합니까?

답변

5

모두 clear all은 입력 변수를 제거하는 것입니다. 함수 내에있을 때, 함수가 볼 수있는 유일한 변수는 함수에 전달 된 변수입니다. 따라서 특히 도움이되는 패턴이 아님을 알 수 있습니다.

1

fun1 등이 일반적인 함수 (예 : 중첩 함수가 아닌) 인 경우 each function gets its own workspace입니다. 이 새로운 함수 작업 공간에서 가질 수있는 유일한 변수는 입력 변수입니다. 따라서 함수의 첫 번째 호출로 clear all을 입력하면 입력 변수가 지워집니다. 귀하의 기능은 입력을 조작 할 수 없습니다.

중첩 된 함수가있는 경우 해당 중첩 함수는 부모 함수와 동일한 작업 영역에 있으므로 clear all도 부모 변수를 제거합니다.

일반적으로 스크립트를 실행하기 전에 기본 작업 영역을 정리하려면 스크립트를 clear all으로 시작해야합니다.

1

아니오, 아니오, 1000 번 아니오.

function 선언을 사용하면 깨끗한 작업 영역을 확보 할 수 있습니다. 함수가 존재하면 전역 변수와 영속성을 제외하고 작업 공간 (및 모든 변수)이 정리됩니다.

스크립트에서도 무차별 clear all 문을 사용하지 않는 것이 좋습니다. 해당 기능이 필요한 위치에있는 경우 파일의 시작 부분에있는 function 키워드는 작업중인 다른 것을 손상시키지 않고 작업 영역을 정리하는 역할을합니다.

1

지금까지 몇 가지 대답은 입력 변수를 지울 수 있기 때문에 기능 시작시 clear all을 사용하는 것이 도움이되지 않는다고 설명했습니다.

나는 단지 clear all이 종종 스크립트에서도 잘못 사용되고 있다고 덧붙입니다. clear all은 현재 작업 공간에서 모든 변수를 지우는 것 이상을 수행합니다. 또한 메모리에서 모든 함수, MEX 파일 및 가져온 Java 클래스를 제거하므로 (다시로드해야하는 경우 많은 작업이 이후에 더 느리게 실행 됨) 영구 변수를 다시 초기화하고 모든 디버그 지점을 제거합니다.

변수를 지우려면 모두 clear (또는 clearvars 또는 clear variables) 만 사용하면됩니다.