괜찮아요, 제가 알아냈어요. 함수 중 하나에 있는 Eval() 함수가 스크립트 시작 시점에 바로 평가되고 있었네요.
간단한 GUI 프로토타입을 작성 중입니다.
콤보 상자에 테이블 목록이 표시되고, 테이블을 추가/열기하는 버튼과 현재 선택된 테이블의 열 이름이 표시되는 필터 열 상자가 있습니다.
첫 실행 시 모든 기능이 정상적으로 작동합니다. 테이블 전환, 열 표시, 콤보박스의 테이블 추가, 닫기 또는 이름 변경에 대한 반응 등이 모두 제대로 이루어집니다.
저는 테이블 구독 기능을 사용하고 있습니다.
GUI 창을 닫고 스크립트를 다시 시작하면 (새로운 인스턴스가 실행 중임에도 불구하고) 심볼이 정의되지 않았다는 오류가 무작위로 발생합니다. 마치 시작 시 이전 인스턴스의 코드 조각들이 임의의 위치에서 계속 실행되면서 해당 코드 조각에 정의된 변수를 찾지 못하는 것처럼 보입니다.
오류 팝업창에서 확인을 클릭하고 다시 실행하니 스크립트가 정상적으로 작동했습니다.
다음은 제 창 닫기 함수입니다.
onWindowCloseExpr = Expr( Write("\!nRunning on window close expression"); For Each({_dt, _index}, (data:tablesListAA << Get Values), Close(_dt, NoSave); ); Unsubscribe to Data Table List( aSub ); Clear Symbols(); Stop(); );
문제 해결 과정에서 스크립트가 제대로 종료되고 모든 내용이 지워지도록 Clear Symbols()와 Stop() 함수를 추가했습니다.
무슨 문제가 발생하고 있는지, 어떻게 해결해야 하는지 아시는 분 계신가요?