print() 함수의 변수 범위 동작은 다른 모든 것과 동일해야 합니다.이 위시리스트 요청은 무엇에서 영감을 받았나요?
변수 범위 관련 문제를 디버깅하는 데 상당한 시간을 썼습니다. 함수 내에서 `{default local}`을 사용하면(저는 거의 항상 사용합니다) 함수는 `::`로 범위를 명시적으로 지정하지 않는 한 전역 변수에 접근할 수 없습니다(이 사실을 몰랐습니다). 하지만 `print()` 함수는 `::` 없이도 자기 자신을 찾으려고 시도하는데, `print()`가 기본적인 디버깅 도구라는 점을 고려하면 매우 혼란스럽습니다!
어떤 개선점을 보고 싶으신가요?
print() 함수는 변수 범위 측면에서 다른 모든 함수와 동일하게 동작해야 합니다.
이 아이디어가 왜 중요한가요?
현재의 행동은 비논리적이고 일관성이 없습니다.
JMP19.1.1.
자동화 및 스크립팅제목: print() 함수의 변수 범위 동작은 다른 모든 함수와 일치해야 합니다 - 상태가 '정보 필요'로 변경됨안녕하세요 @JohnJoyceFlusso님 - 요청해주셔서 감사합니다. 해당 동작을 보여주는 스크립트를 제공해 주실 수 있나요?
Re: print()의 변수 범위 동작은 다른 모든 것과 동일해야 합니다다음은 문제를 보여주는 최소한의 스크립트입니다. print() 함수는 작동하지만 msgbox() 함수는 작동하지 않습니다.
참고로, 이 기능은 유용한 기능을 제공하기 위한 것이 아니라 문제점을 보여주기 위한 것입니다.
아쉽게도 print() 함수는 변수 범위와 관련해서 다른 모든 함수와는 다르게 동작합니다.
저는 이런 현상을 보이는 다른 언어를 본 적이 없습니다. 뭔가 잘못된 것 같습니다.
제 생각에는 Print() 함수도 다른 모든 함수와 다르지 않아야 합니다.
dummy = "Hello";
test = Function( {},
{default local},
Print( dummy );
msgbox( dummy );
);
test();
Re: print()의 변수 범위 동작은 다른 모든 것과 동일해야 합니다msgbox() 함수 때문에 혼란을 드린 점 사과드립니다. 해당 함수는 내장 함수가 아니라 제가 직접 만든 함수입니다.
제 주장을 뒷받침하는 예시를 하나 보여드리겠습니다. 라디오 버튼을 처음 시도했을 때는 "options"가 로컬에 정의되어 있지 않아서 아무 옵션도 표시되지 않습니다. 그런데도 print() 함수는 신기하게도 해당 변수에 접근할 수 있습니다.
옵션을 로컬에서 정의하면 두 번째 실행 시에도 동일한 라디오 버튼이 정상적으로 작동합니다.
요점은 print() 함수가 다른 함수들과 다르게 동작해서는 안 된다는 것입니다. 그렇지 않으면 디버깅 도구로 사용하기가 다소 어려워지기 때문입니다.
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
New Window( "Pick one",
<
<MODAL></MODAL>
<BR /> <BR />
Re: print()의 변수 범위 동작은 다른 모든 것과 동일해야 합니다@JohnJoyceFlusso
함수 내부에서 `eval(eval expr())`을 사용하면 `options` 변수에 접근할 수 있습니다. 제 경우에는 이렇게 하면 잘 작동합니다.
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
eval( eval expr( New Window( "Pick one",
<
<MODAL></MODAL>
Re: print()의 변수 범위 동작은 다른 모든 것과 동일해야 합니다네, 감사합니다. 맞습니다. (지원 담당자분들이 지적해주신 것처럼 '옵션'에 ::options로 접근하는 것도 가능합니다.)
제가 문제 삼는 부분은 Print() 함수가 다른 모든 함수와 다르게 동작한다는 점인데, 이는 비논리적입니다.