수색…
통사론
- varName ? value를 설정 하시겠습니까?
- 설정되지 않았습니까? - 노숙자 ? ? -? ? varName varName varName ?
- $ varName을 넣는다.
- puts [set varName ]
- 변수 varName
- 전역 varName ? varName varName ?
비고
변수에 값 할당
명령 set 은 Tcl에 값을 할당하는 데 사용됩니다. 다음과 같은 두 개의 인수로 호출 될 때,
% set tempVar "This is a string."
This is a string.
첫 번째 인수 (tempVar)가 참조하는 메모리 공간에 두 번째 인수 ( "This is a string.")를 배치합니다. set 항상 첫 번째 인수에 명명 된 변수의 내용을 반환합니다. 위의 예제에서 set 은 "This is a string"을 반환합니다. 따옴표없이.
- value 가 지정되면 varName 변수의 내용이 value와 동일하게 설정됩니다.
- varName 이 영숫자 문자로만 구성되고 괄호가없는 경우 스칼라 변수입니다.
- varName 의 형식이 varName (index) 이면 연관 배열의 멤버입니다.
변수의 이름은 라틴 알파벳에만 국한되지 않으며, 유니 코드 문자 (예 : 아르메니아어)의 조합으로 구성 될 수 있습니다.
% set տուն house
house
% puts ${տուն}
house
범위 지정
set alpha 1
proc myproc {} {
puts $alpha
}
myproc
두 alphas가 다른 범위에 있기 때문에이 코드는 작동하지 않습니다.
명령 set alpha 1 은 전역 범위에 변수를 작성합니다 (전역 변수로 만듭니다).
puts $alpha 는 myproc 명령이 실행될 때 생성 된 범위에서 실행됩니다.
두 범위는 구별됩니다. 이 때 것을 의미 puts $alpha 이름 찾기 위해 시도 alpha , 그것은 그러한 변수를 찾을 수 없습니다.
그러나 다음과 같이 수정할 수 있습니다.
proc myproc {} {
global alpha beta
puts $alpha
}
이 경우 전역 변수 두 개 ( alpha 와 beta )가 프로 시저 범위에서 별칭 변수 (동일한 이름)에 연결됩니다. 별칭 변수를 읽으면 전역 변수의 값을 가져오고 값을 쓰면 전역 변수의 값이 변경됩니다.
보다 일반적으로 upvar 명령은 이전 범위의 변수에 대한 별칭을 만듭니다. 전역 범위 ( #0 )와 함께 사용할 수 있습니다.
proc myproc {} {
upvar #0 alpha alpha beta b
puts $alpha
}
별칭에는 ( alpha ) 또는 다른 이름 ( beta / b )에 연결된 변수와 동일한 이름을 지정할 수 있습니다.
전역 범위에서 myproc 을 호출하면이 변형도 작동합니다.
proc myproc {} {
upvar 1 alpha alpha beta b
puts $alpha
}
범위 번호 1 은 "이전 범위"또는 "호출자 범위"를 의미합니다.
자신이하는 일을 실제로 알지 upvar #0 , 0 및 1 만이 upvar 와 함께 사용하는 것이 upvar . ( upvar 0 은 범위 지정 작업이 아닌 로컬 변수에 대한 로컬 별칭을 만듭니다.)
일부 다른 언어는 중괄호로 범위를 정의하고 각 범위에서 실행되는 코드가 주변 범위의 모든 이름을 보도록합니다. Tcl에서는 프로 시저가 호출 될 때 하나의 단일 범위가 만들어지며 자체 이름 만 표시됩니다. 프로 시저가 다른 프로 시저를 호출하면 해당 범위는 이전 범위 위에 쌓이는 식으로 계속됩니다. 즉, 전체 범위와 로컬 범위 (하위 범위 포함) 만있는 C 스타일 언어와 달리 각 범위는 모든 범위가 열린 범위에 대해 (즉시 표시되지는 않지만) 범위로 포함됩니다. 프로 시저가 반환되면 범위가 삭제됩니다.
변수 값 인쇄하기
변수의 값을 인쇄하려면,
set tempVar "This is a string."
puts 문에서 인수 앞에 $ 기호가 붙습니다.이 기호는 Tcl에 변수의 값을 사용하도록 지시합니다.
% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.
하나의 인수로 집합 호출하기
set 은 하나의 인수로 호출 할 수도 있습니다. 하나의 인수로 호출하면 해당 인수의 내용을 리턴합니다.
% set x 235
235
% set x
235
변수 / s 삭제 중
unset 명령은 하나 이상의 변수를 제거하는 데 사용됩니다.
unset ?-nocomplain? ?--? ?name name name name?
- 각 이름 은
set명령에 허용되는 모든 방법으로 지정된 변수 이름입니다. - 이름 이 배열의 요소를 참조하면 해당 요소는 배열의 나머지 부분에 영향을주지 않고 제거됩니다.
- 이름은 괄호 안에없는 인덱스 배열 이름으로 구성하면, 전체 배열이 삭제됩니다.
- -nocomplain 이 첫 번째 인수로 주어지면 모든 가능한 오류가 명령의 출력에서 제외됩니다.
- 옵션 - 옵션의 끝을 나타내며 옵션과 동일한 이름의 변수를 제거하려는 경우 사용해야합니다.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable
네임 스페이스 변수
variable 명령은 주어진 네임 스페이스 변수가 생성되도록합니다. 값이 할당 될 때까지 변수의 값은 정의되지 않습니다.
namespace eval mynamespace {
variable alpha
set alpha 0
}
변수는 네임 스페이스의 이름을 붙이면 네임 스페이스 바깥에서 실제로 액세스 할 수 있습니다.
set ::mynamespace::alpha
variable 명령을 다시 사용하여 프로 시저 내에서 액세스를 단순화 할 수 있습니다.
proc ::mynamespace::myproc {} {
variable alpha
set alpha
}
네임 스페이스 변수에 대한 로컬 별칭이 만들어집니다.
다른 네임 스페이스에 정의 된 프로 시저의 경우 변수 이름에는 variable 호출에 네임 스페이스가 있어야합니다.
proc myproc {} {
variable ::mynamespace::alpha
set alpha
}