2013-05-24 2 views
2

Tcl에 문제가 있습니다. 문자열이 들어있는 변수가 있습니다. Butt 이제이 문자열을 다음 변수의 이름으로 사용하겠습니다.Tcl 변수 이름을 변수 이름으로 지정

나는 웹에서 비슷한 질문을 발견했다. 그러나 이것들은 변수의 값을 다른 변수에 두는 것에 관한 것이다. 변수의 이름으로 사용하지 마십시오. 는 다음을 수행 할 수있다 그래서 bassicly

foreach key [array names ::openedFiles] { 
    puts $::openedFiles($key) 
    set filename [file tail $::openedFiles($key)] 
    set parts [split $filename .] 
    set name [lindex $parts 0] 

    puts $name 

    $L1 create cell $name 

    set "value of $name" [ layout create $::openedFiles($key) -dt_expand -log LUN.log] 

: 여기

은 설명 도움이되는 샘플 코드입니다. 배열에 경로 문자열이 있습니다. 파일 확장자가없는 경로에서 파일 이름 만 가져옵니다.

버트 다음 "$ name"의 값인 "셀"변수를 만들고 싶습니다. 파일 이름이 "테스트"입니다 때, $ 이름의 값은 "테스트"가 될 것이며, 나는 그래서 $ 이름의 값이 새의 이름이 될 것이라고이

 set Test [ layout create $::openedFiles($key) -dt_expand -log LUN.log] 

같은 마지막 행을 수행 할 변하기 쉬운. 그래서 배열의 모든 값의 이름으로 변수를 만들 수 있습니다.

도움이나 조언이 도움이 될 것입니다.

대단히 감사합니다!

+1

이 아닌'설정 $ 이름 [레이아웃을 만들 수 있는가 변수 이름 당신이 "별명"을 만들 upvar을하고자 생각하고 있어요 $ :: openedFiles ($ 키) -dt_expand -log LUN.log ]'직장? – Jerry

+0

없음 apperantly 없다, 나는 그런 식으로 그것을 원하고 내가 다음 코드를 추가 갈 때 원인 : '설정 cell_top [$ 이름 topcell]' 나는 그가에 대한 옵션 topcell을 찾을 수 없다는 오류가 발생 $ name. 변수를 사용하지 않고 이름 만 사용하면 트릭을 수행하므로 ... –

+0

이 권리가 있습니까? 다른 변수의 이름을 포함하는'a' 변수를 가지고 있습니다.'b'라고 말하면'a'를 참조하여'b'에 할당하려고합니다. – nurdglaw

답변

4

올바른 해결책은

set name "foo" 
set $name "bar" 
puts $foo ;# -> bar 

를 설정하는 첫 번째 매개 변수로 $name을 사용하는 것입니다하지만 $name를 사용하려고하면 그것은 당신이 코멘트에 따라 코드에서 할 것입니다 foo하지 bar을 (얻을 것입니다 . 당신이 어쨌든 이름이 당신이 모르는 변수 만해야하는 이유를 알고 싶습니다 :.

puts [set $name] ;# -> bar 

는 당신에게 올바른 일을 줄 것을 객체와 같은 작품 :

set topcell [[set $name] topcell] 

그럼 물어볼 필요가 있습니다. 동적 이름이 지정된 변수로 무엇을하고 싶습니까?

+0

전자 desings에 대한보기 programma에 대한 매크로로 작동하는 스크립트를 작성하고 있습니다. 동적 변수를 사용하여 레이아웃을 만듭니다. 그러나 레이아웃은 자동적으로 변수의 이름을 얻습니다.그래서 나는 모든 변수에 다른 동적 이름을주고 싶습니다. –

+1

이중 참조 해제를 원한다고 생각하는 대부분의 경우 실제로 배열의 요소를 사용하는 것이 더 좋습니다. –

0

내가

$ tclsh 
% set name Test 
Test 
% upvar 0 cell $name 
% set cell 42 
42 
% puts $Test 
42 
관련 문제