set — 변수 읽기와 쓰기
set — 변수 읽기와 쓰기
Tcl에서 값을 담아 두는 가장 기본적인 도구는 변수이고, 그 변수를 읽고 쓰는 가장 기본적인 명령이 바로 set이에요. 값을 저장할 수도, 저장된 값을 다시 꺼내 올 수도 있는 양방향 명령이라서 Tcl 코드 곳곳에서 빠지지 않고 등장해요.
출처: 문서
본문
문법
set varName ?value?
동작 방식
set은 변수 varName의 값을 반환해요.
value가 지정되면 varName의 값을 value로 설정하고 그 값을 반환해요. 이때 변수가 아직 없었다면 새로 만들고요.
varName이 열린 괄호로 시작해서 닫힌 괄호로 끝난다면 배열 요소를 가리키는 것으로 다뤄져요. 첫 번째 열린 괄호 앞의 문자들은 배열 이름이고, 괄호 사이의 문자들은 배열 안의 인덱스예요. 그렇지 않으면 varName은 스칼라 변수를 가리켜요.
varName에 네임스페이스 한정자(배열 요소를 가리킬 때는 배열 이름에)가 포함되어 있거나, varName이 한정되지 않았는데(어떤 포함 네임스페이스의 이름도 포함하지 않는데) 활성 프로시저가 없다면, varName은 namespace 매뉴얼 페이지의 NAME RESOLUTION 절에 설명된 규칙에 따라 해석되는 네임스페이스 변수를 가리켜요.
만약 프로시저가 활성 상태이고 varName이 한정되지 않았다면, varName은 global, variable, upvar 명령 중 하나로 다르게 해석되도록 선언되지 않는 한 프로시저의 매개변수 또는 지역 변수를 가리켜요.
예제
변수 r에 난수를 저장하기:
set r [expr {rand()}]
배열 요소에 짧은 메시지 저장하기:
set anAry(msg) "Hello, World!"
변수로 지정한 이름의 배열 요소에 저장하기:
set elemName "msg"
set anAry($elemName) "Hello, World!"
이름이 변수 vbl에 저장되어 있는 변수에서 값을 out으로 복사하기 (실제로는 이중 역참조 대신 배열을 쓰는 게 더 쉬운 경우가 많다는 점을 참고하세요):
set in0 "small random"
set in1 "large random"
set vbl in[expr {rand() >= 0.5}]
set out [set $vbl]
마지막 예제의 [set $vbl]은 vbl의 값을 변수 이름으로 해석해서, 그 이름을 가진 변수의 값을 반환하는 패턴이에요.
더 알아보기
expr: 수식 평가global/variable/upvar: 변수의 스코프 제어proc: 프로시저 정의trace,unset: 변수 추적과 제거