JMP는 전역 네임스페이스를 새 스크립트의 기본 네임스페이스로 사용합니다. "로컬" 네임스페이스를 지정하는 방법은 Names Default to Here(1) 명령입니다. 내 질문은 이것입니다. 맨 위에 Names Default to Here(1)이 있는 파일을 포함하면 하위 스크립트에서 이름/변수를 가져올 것입니다. 그러나 내가 정의하면
include("filepath/name.ext", << New Context, << NamesDefaultToHere) 네임 스페이스를 별도로 유지합니다 .. 그 이유는 무엇입니까? 같은 일을해야 할 것 같습니까? Include 문을 사용하고 있으므로 하위 스크립트에서 이름을 흡수하고 싶다고 가정합니까?
아래 세트는 NamesDefaultToHere(1)가 스크립트 B에 있더라도 x = 10을 반환합니다.
스크립트 A
x = 5;
include("filepath/script_B.jsl");
show(x);스크립트 B
namesDefaultToHere(1);
x = 10;
이것은 x =5를 반환하지만 include 문에 namesDefaultToHere가 있었기 때문입니다.
스크립트 A
x = 5;
include("filepath/script_B.jsl", << newContext, <<NAMESDEFAULTTOHERE></NAMESDEFAULTTOHERE>스크립트 B
namesDefaultToHere(1);
x = 10
@drewfoglia 그리고 @EvanMcCorkle Tuscon 2019에서 열린 Discovery Summit에서 훌륭한 프레젠테이션을 했습니다. 효율성과 재현성을 위한 필수 스크립팅: 적은 작업으로 더 많은 작업 수행(2019-US-TUT-290) 이 주제에 대해 설명합니다.
슬라이드 중 하나(22)는 Names Default to Here에 대한 오해를 제공합니다. 그 중 하나는 각 JSL 파일에 고유한 Here 컨텍스트가 있다는 것입니다. 이것은 각 스크립트가 개별적으로 실행되는 경우에 해당되지만 JSL 파일 A에 JSL 파일 B를 포함할 때 B는 A의 Here 컨텍스트를 공유합니다.
첫 번째 예에서 이름을 결정하는 규칙 , JMP는 Here 네임스페이스에서 X를 찾고 값 10을 표시합니다.
두 번째 예에서 "새로운 컨텍스트" 스크립트 B가 실행되는 익명의 네임스페이스를 생성합니다. 이 경우 X는 Here 네임스페이스의 일부가 아니므로 Global 네임스페이스에서 찾은 값이 표시됩니다.