2011-08-23 7 views
3

TCL에 global에 관한 질문이 있습니다. set SIGNAL 10 tclone.tcl에서TCL에서 글로벌 키워드 사용

, 나는 tcltwo을 improted : 하나 TCL 파일 tclone.tcl에서 , 내가 전역 변수가로 : tcltwo.tcl라는 또 다른 TCL 파일에 global SIGNAL

을, 나는 변수 신호를 설정 .tcl "다음으로 나는 그것을 실행? 및 gloable 변수의 사용은 무엇인가? its manual page에 명시된 바와 같이

+0

짧은 대답은 "예"입니다. –

답변

3

, 단지 내부 의미 한 global 명령 할 때 이 tclone.tcl에서 변수 신호가 10로 설정됩니다 것 package require tcltwo.tcl proc 본문 :

이 명령은 proc 본문의 컨텍스트에서 실행하지 않는 한 효과가 없습니다.

그래서 전체적인 질문은 명확하지 않습니다. 전역 변수를 설정하는 첫 번째 파일에 proc가 있고 두 번째 파일에 다른 proc (두 번째 파일에 있음)을 설정했다면 의미가 맞는 것이고 대답은 예입니다. 두 번째 파일의 코드에 변경 사항이 표시됩니다. 제공되는 첫 번째 파일의 코드에 따라 "설정"절차가 "가져 오기"전에 실행됩니다. 가능한 한 더 명확하게하기 위해 전역 변수는 인터프리터와 관련하여 변수가 실행되는 코드를 전역 적으로 표현합니다. 따라서 어느 방법으로 코드를 인터프리터 (package requiresourceeval 등)로 가져 오더라도 모든 코드는 동일한 전역 집합을 볼 수 있습니다.

그러나 어쨌든 전역 변수를 사용하지 말고 네임 스페이스 변수를 사용하지 않아야합니다. 즉, 전역 변수이지만 이후에 다른 코드를 추가 할 위험이 줄어들어 실수로 해당 전역 변수가 엉망이되어 버릴 수 있습니다. 물론, 일반적으로 이것은 애플리케이션이 얼마나 복잡 할 것으로 예상되는지에 달려 있습니다.

+0

그건 그렇고, 변수의 이름은 프로그램의 다른 부분들 사이의 일종의 동기화를 위해 변수의 이름을 사용하려고합니다. 그렇다면 휠을 다시 만들지 않고 uevent (http://tcllib.sourceforge.net/doc/uevent.html)를 살펴 봐야합니다. – kostix

+0

질문은 : 첫 번째 파일의 proc에 전역 시그널이 있고, 두 번째 파일에는 시그널 10이 있지만 proc에는 시그널 10이 없다는 것을 알기 때문에 다음의 패키지처럼 seconde 파일을 바 꾸었습니다. tcltwo.tcl이 필요합니다 첫 번째 파일의 변수 SIGNAL은 실행될 때 10으로 설정됩니까? –

+1

@ratzip의 경우,'set signal 10 '문맥에 의존한다 :이 명령이 최상위 레벨에서 호출된다면 (예를 들어'namespace eval foo ...'내에서 호출되지 않는다면) 응답은 yes이다. 설정 시그널 자체가 실행되기 전의 * global 시그널을 가진 어떤 프로 시저에서 호출 될 때, 응답은 또한 yes이다. 다시 말하면 :'set signal 10 '명령의 결과는 보는 컨텍스트에 달려있다. : SIGNAL 10'은 컨텍스트가 무엇이든 관계없이 항상 전역 변수 "신호"를 설정합니다. – kostix