variable
을 사용하는 적절한 방법은 달러 기호의 유무와 상관없이 무엇입니까? $
와 (다른 모든 경우에
set var 10
variable
이 언급 또는 사용 (그러나 선언되지 않음) 때 적절한 구문 $variable
이다 : 나는 variable
($
없이) (배쉬 유사) variable
선언시에만 사용됩니다 생각) :
set newVar $var
puts $var
puts $newVar
그러나 나는 그것을 교환하고이 코드가 작동하는지 보인다 코드를 발견
# using argv
if {[array exists argv]} {
puts "argv IS ARRAY"
} else {
puts "argv IS NOT AN ARRAY"
}
# using $argv
if {[array exists $argv]} {
puts "\$argv IS ARRAY"
} else {
puts "\$argv IS NOT AN ARRAY"
}
# using argv
if {[string is list argv]} {
puts "argv IS LIST"
} else {
puts "argv IS NOT LIST"
}
# using $argv
if {[string is list $argv]} {
puts "\$argv IS LIST"
} else {
puts "\$argv IS NOT LIST"
}
출력 :
회신 연구를 더욱 저를 지적하고 나는 TCL은 "자체 수정 코드의 일종을하고있는 것으로 나타났습니다 : 회신
argv IS NOT AN ARRAY
$argv IS NOT AN ARRAY
argv IS LIST
$argv IS LIST
편집 잭맨 @glenn하기 "또는 정확한 이름이 무엇이든간에 예 :
% set variableName "x"
x
% puts $x
can't read "x": no such variable
% set $variableName "abc"
abc
% puts $x
abc
% puts [set $variableName]
abc
%
%
%
%
%
%
% set x "def"
def
% puts $x
def
% puts [set $variableName]
def
%
이제 답이 문제가 될 수 있지만 한 가지 질문이 남아 있습니다. 이 문서에서 발췌 한 것입니다
set varName ?value?
array exists arrayName
문서는 모두 기능이 variable
대신 $variable
기대 즉 변수 이름 (값을) 기대했다. 그래서 위의 자체 수정 코드를 기반으로 가정하면 variable
대신 $variable
을 전달하면 변수 치환이 발생합니다 (정확히 위의 코드와 동일). 하지만 $variable
에 배열이 아닌 목록 (테스트 중 내 인수는 param0 param1 "param 2"param3)이 아닌 무언가가 포함 된 경우 어떻게됩니까? 이 관점에서 $argv IS LIST
이라는 출력이 잘못되었습니다. 내가 여기서 무엇을 놓치고 있니? 회신
편집 @schlenk합니다 :
마지막으로 I (희망)이 문제를 이해합니다. TCL에 대해 great article을 발견했습니다.이 문제는 (뿐만 아니라)이 문제를 설명합니다. 내가이 글에서 몇 가지 현명한 문을 정확히 보자 : 문자열을 조작 을의 명령에 달려 무엇을 나타내는 지 티클에서
- 합니다.
- 모든 것이 Tcl의 명령입니다. 알 수 있듯이 지정 연산자가 없습니다.
if
은 두 개의 인수가있는 명령입니다.- 명령 이름은 특수한 형식이 아니라 단지 문자열입니다.
는 또한 following SO answer이 문 확인 :
"티클에서를, 값은 ... 그들이 지정된 형식으로 사용할 수 있는지 여부이다 질문 유형이 없습니다." 명령 string is integer $a
의미 :
- "나는 정수 "
이
NOT"
$a
정수의 값이므로$a
의 값을 사용할 수 ""모든 정수는 (하나 개의 요소)도 유효한 목록 ... 그 중 하나를 사용 할 수 있고 (정수에 대한 여러 다른 것 같이). "
% set abc "asdasd"
asdasd
% string is list $abc
1
% string is alnum $abc
1
string is list
반환 한 $abc
은 문자열이고 또한 하나 개의 요소 목록 등 대부분의 튜토리얼에서 조각을 다음을 선언하고 목록 작업의 적절한 방법이라고이 있다고합니다 때문에 : 같은 string is list
명령에도 적용됩니다 :
% set list1 { 1 2 3 }
% lindex $list1 end-1
2
그러나 TCL의 모든 것이 문자열 일 때 다음이 내 경험에서 작동합니다 (잘못된 경우 제발 제발).
% set list2 "1 2 3"
1 2 3
% lindex $list2 end-1
2
읽기 티클 대체 규칙을. 먼저 현재의 명령을 실행하기 전에 인수를 그룹화 한 다음 변수와 명령을 대체합니다. – schlenk
@schlenk 나는 몇 번이나 해왔지만 아직 그 요점을 놓치고있다. 죄송합니다. –