이 주제에 대한 여러 스레드와 Scripting Guide의 섹션이 이미 있지만 내 질문에 대한 답은 없습니다.
Main.jsl과 Function.jsl의 두 파일이 있으며 전자에 후자의 파일을 포함합니다. Main.jsl의 For 루프 내부에서 호출하려는 Function.jsl에 정의된 함수가 있습니다. 내가 가진 문제는 호출된 Function도 For 루프를 사용하고 Main.jsl의 For 루프와 Function.jsl의 Function 모두 계산 변수로 i를 사용하므로 네임스페이스 오염이 발생한다는 것입니다.
나는 두 파일의 다른 위치에서 Names Default Here(1)를 사용하고 Include()에서 << New Context 인수를 사용하고 ::를 사용하여 전역 변수로 함수 이름을 정의하는 여러 조합을 시도했습니다. 이 문제를 해결하십시오. 그러나 문제는 항상 1) Main.jsl에서 Function.jsl의 Function을 호출할 수 있었지만 네임스페이스 오염이 있거나 2) Function.jsl에서 Function.jsl을 호출할 수 없다는 것이었습니다. Main.jsl은 내가 접근하는 방법을 모르는 네임스페이스나 범위에 정의되어 있기 때문입니다.
현재 해결 방법은 i와 Local() 내부의 전체 함수 내용을 명시적으로 정의하고 함수 자체를 다음과 같이 전역 변수로 정의하는 것입니다.
메인.jsl
Include("Function.jsl", << New Context);
Names Default To Here(1);
for(i = 1, i <= 10, i++,
returns = ::function(arguments);
);함수.jsl
::function = Function({arguments},
Local({i},
for(i = 1, i <= 20, i++,
Do Something;
);<BR /> Return(returns);
);
);제 질문은 이것이 정말 올바른 방법입니까? 예를 들어, Function.jsl에 네임스페이스를 할당한 다음, return = ns_function:function(arguments);와 같은 전역 변수를 사용하는 대신 이것을 사용하여 Function을 호출할 수 있다면 더 좋을 것 같습니다. 그리고 이상적으로는 Main.jsl의 i가 Here 네임스페이스에 있고 Function.jsl의 i가 ns_function 네임스페이스에 있기 때문에 네임스페이스 오염도 방지할 수 있습니다. 그러나 이것이 가능한지/어떻게/가능한지 모르겠습니다.
Windows 10 Enterprise 64비트에서 JMP Pro 16.2(570548) 사용.