몇몇 다른 프로그래밍 언어는 기본적으로 전역 환경이 아닌 로컬 네임스페이스/환경을 사용합니다. JMP 전문가들은 다른 JMP 스크립트와의 충돌을 피하기 위해 일반적으로 로컬 네임스페이스가 새 스크립트에 적합하므로 스크립팅할 때마다 NamesDefaultToHere(1)가 BKM이라고 말합니다. "true" 인수로 모든 스크립트를 정의하는 것보다 스크립트가 전역 네임스페이스에 있도록 하려는 경우 NamesDefaultToHere(0)을 정의하는 것이 더 편리합니다.
안녕 @cnattrass , 제안해 주셔서 감사합니다! 귀하의 요청을 포착했으며 이를 고려할 것입니다.
전역 네임스페이스를 기본값으로 사용하는 것은 매우 잘못된 설계 결정이라고 생각합니다. 하지만 이전 버전의 JMP에서 작성된 JSL 스크립트와의 하위 호환성을 위해 필요할 수 있다는 점은 이해합니다.
나는 새로운 JSL 코더가 여러 스크립트와의 변수 이름 충돌로 인해 이상하고 디버그하기 어려운 일이 발생하기 시작할 때 이에 대해 어려운 방법으로 배운다고 생각합니다. 특히 전역 네임스페이스에서 이전에 실행된 스크립트에 의해 남겨진 잔해가 있습니다.JSL에서는 변수 선언이 필요하지 않고 전역 네임스페이스가 기본값이므로 예상치 못한 값이 스크립트에 침입하지 않도록 스크립트 상단에서 모든 변수를 빈 상태로 초기화하는 것이 절대적으로 중요하다고 생각합니다. 혼란과 대혼란.
물론, 넣어두는 것도 좋은 습관이다. 이름의 기본값은 여기에 있습니다(1); 지금까지 작성된 모든 단일 JSL 스크립트의 맨 위에 항상 위치합니다. 필요 이상한 이유로 전역 네임스페이스를 사용하는 것입니다.그런 상황에서도 기본 네임스페이스를 Local로 설정하고 모든 Global 변수를 전역 네임스페이스로 명시적으로 참조하는 것이 더 낫다고 생각합니다. ::글로벌_이름 통사론.따라서 이전 버전과의 호환성을 위해 기본 전역 네임스페이스가 꼭 필요한 경우 스크립트 편집기에서 항상 삽입할 수 있는 옵션이 있어야 합니다. 이름의 기본값은 여기에 있습니다(1); 코더가 매번 이것을 기억하고 입력하도록 요구하는 대신 모든 새 스크립트의 맨 위에 .
이러한 예방 조치에도 불구하고 충돌이 발생하는 극단적인 경우가 여전히 발생합니다.예를 들어, 요약 그리고 제품 함수에는 다음과 같은 암시적 변수가 포함됩니다. 나 기본적으로.이미 기본 로컬 네임스페이스를 설정한 스크립트 내에서 사용하면 괜찮습니다.하지만 열 수식은 어떻습니까?나는 일반적으로 열 수식을 스크립트라고 생각하지 않습니다. 비록 그것이 정확히 그것이기는 하지만 말입니다.GUI 수식 편집기를 사용하여 그래픽으로 편집합니다.그것은 결코 내 마음을 초월한 적이 없었습니다.
음, 제가 처음으로 사용했던 건 요약 열 수식에서 로컬 네임스페이스를 설정하는 것을 잊어버린 테이블 스크립트를 실행하게 되었는데, 여기서는 을 위한 반복자를 다음과 같이 사용하여 루프 나 .이는 당연히 혼란과 대혼란을 불러일으켰습니다.애플리케이션이 응답하지 않고 무한 루프에 빠져서 작업을 종료해야 했습니다.그런 다음 나는 그것을 몇 번 더 시도해야만 했고, 마침내 나는 내가 저지른 끔찍하고 모호한 실수를 깨달았습니다. 요약 의 유해한 글로벌 나 반복자.간단히 말해서, 이제 열 수식에서도 스크립트 편집기를 두 번 클릭하고 이름의 기본값은 여기에 있습니다(1); .그것 없이는 어떤 스크립트도 안전하지 않습니다 .