로그인된 값이 스크립트 실행에서 일치하지 않는 값을 인쇄합니다.안녕하세요, Default Local 범위를 사용하는 함수의 일부 동작을 이해하려고 합니다. 즉, Print 문을 사용할 때 내 로그에 나타나는 값이 내 코드가 실행되는 값과 일치하지 않습니다. 예를 들어 이 스크립트에서:
Names Default To Here( 1 );
EXAMPLE_VALUE = "100";
showExampleModal = Function( {},
{Default Local},
Print("Here:EXAMPLE_VALUE: " || Char(Here:EXAMPLE_VALUE));
Print("EXAMPLE_VALUE: " || Char(EXAMPLE_VALUE));
modal = New Window( "Example Modal",
<<MODAL></MODAL>내 로그에 다음이 표시됩니다.
"Here:EXAMPLE_VALUE: 100"
"EXAMPLE_VALUE: 100"
그러나 내 모달에는 다음이 표시됩니다.
Here:EXAMPLE_VALUE: 100
EXAMPLE_VALUE: .
스크립팅Re: 로그인된 값이 스크립트 실행에서 일치하지 않는 값을 인쇄합니다.@매트스키 , 함수에서 기본 로컬 네임스페이스를 선언할 때 범위가 지정되지 않은 모든 변수는 해당 함수에 대해 로컬입니다(참조: 여기 ). EXAMPLE_VALUE는 함수 외부에서 선언되므로 모달은 변수 참조 범위가 Here인 경우에만 올바른 값을 표시합니다. 함수 내에서 EXAMPLE_VALUE를 선언하면 로컬로 만들고 함수에서 사용할 수 있지만 스크립트의 나머지 부분에서 액세스할 수 있는 Here 네임스페이스에 존재하지 않습니다. 여기 네임스페이스 참조에 대한 유용한 페이지 .
Re: 로그인된 값이 스크립트 실행에서 일치하지 않는 값을 인쇄합니다.참조하는 네임스페이스에 링크한 문서에 따르면 Default Local " 참조 규칙은 변경되지 않았습니다." 및 규정되지 않은 참조에 대한 참조 규칙은 다음과 같이 말합니다.
만약 여기에 기본 이름 모드가 켜져 있으면 JMP는 다음 위치에서 변수를 찾습니다.
- 현지의 네임스페이스
- 여기 네임스페이스
- 현재 데이터 테이블
따라서 Local 네임스페이스에 문제의 이름을 가진 로컬 변수가 없는 경우에는 여전히 Here로 폴백해야 한다고 문서에 명시되어 있는 것 같습니다.
이와는 별도로 Print 문의 동작이 Print가 만들어지는 컨텍스트의 동작과 일치하지 않는 것이 문제가 있는 것 같습니다.
Re: 로그인된 값이 스크립트 실행에서 일치하지 않는 값을 인쇄합니다.JSL에서 범위를 다룰 때. 나는 거의 항상 당신이 그들 사이를 이동하는 경우 명시적이라고 말합니다.단일 범위 지정 문제를 디버깅하는 데 DAYS를 보냈습니다.
Re: 로그인된 값이 스크립트 실행에서 일치하지 않는 값을 인쇄합니다.추가 디버깅을 기반으로 무슨 일이 일어나고 있는지 이해한다고 생각합니다.
업데이트된 코드:
Names Default To Here( 1 );
EXAMPLE_VALUE = "100";
showExampleModal = Function( {},
{Default Local},
// (1)
hereStr = "Here:EXAMPLE_VALUE: " || Char( Here:EXAMPLE_VALUE );
unqualifiedStr = "EXAMPLE_VALUE: " || Char( EXAMPLE_VALUE );
// (2)
hereStrTextBox = Text Box( "Here:EXAMPLE_VALUE: " || Char( Here:EXAMPLE_VALUE ) );
unqualifiedStrTextBox = Text Box( "EXAMPLE_VALUE: " || Char( EXAMPLE_VALUE ) );
// (3)
Print( hereStr );
Print( unqualifiedStr );
modal = New Window( "Example Modal",
<<MODAL></MODAL>
(1)에서 과제는 즉시 평가되므로 나중에 인쇄/텍스트 상자로 전달될 때 예상대로 정의됩니다. 이것은 (3)의 출력과 (4)의 첫 번째 텍스트 상자에 의해 확인됩니다.
(2)에서 텍스트 상자는 줄이 실행될 때 다시 평가되므로 표시될 때 내가 기대하는 값을 사용하여 다시 정의됩니다. 이것은 (4)의 마지막 두 텍스트 상자에서 확인됩니다.
(4)의 가운데 두 텍스트 상자는 실제로 즉시 평가되지 않고 센터 상자(또는 목록 상자?)에 식으로 전달되고 나중에/다른 범위에서 평가됩니다(목록 상자 또는 목록 상자의 범위를 추측합니다. 또는 센터 박스). 결과적으로 EXAMPLE_VALUE의 값은 내가 예상한 값이 아니라 다른 범위에서 평가되는 EXAMPLE_VALUE의 값입니다(즉, 정의되지 않음).
이것은 (5)에 의해 확인된 것으로 보이며, 이는 Prints를 나중에/다른 범위에서 평가할 표현식으로 전달하기도 합니다.
정확합니까?
Re: 로그인된 값이 스크립트 실행에서 일치하지 않는 값을 인쇄합니다.상자에는 자체 범위가 있습니다. 현재 모달 창을 만들고 있지만 그렇게 하지 않고 함수가 닫히고 모든 로컬 변수가 사라진 경우를 상상해 보십시오.그런 것들에 대해서는 보통 다음과 같은 일을합니다.
Names default to here(1);
test = function({something_passed, kwargs={}},
{DEFAULT LOCAL},
// Kwargs
kwarg = Try(kwargs["kwarg"], "default"); // kwarg description
something_not_passed = 14;
nw = new window("Scope",
window:something_not_passed = something_not_passed; // just assignthe variable to the display
window:something_passed = something_passed;
window:something_direct = 42;
buttonbox("OK",
<<SET function=""></SET>