2015-01-30 9 views
1

Tcl의 if 문에 괄호 () 대신에 중괄호 { }이 필요하다는 것을 알고 있습니다. "If 문에서 괄호 안에있는 공백을 구문 분석하는 방법

set flow_control 1 
if ($flow_control==1) { 
    puts "Aha!" 
} 

그러나 (공백) 다음은 표현의 불균형 열린 괄호 '와 함께 실패 그러나

다음 (잘못된) 코드가 인쇄 Tcl은 올바르게 경우 조건을 해석 할 수있을 것 같다 "Aha!" 때문에 (1 " '또는 공백없이, 또는 괄호없이 하나 중괄호를 사용하여

set flow_control 1 
if ($flow_control == 1) { 
    puts "Aha!" 
} 

그리고 물론

는 작동합니다

set flow_control 1 
if {$flow_control == 1} { 
    puts "Braces rule!" 
} 

제 질문은 두 번째 사례가 실패하는 이유는 무엇입니까?

Donal Fellows의 대답 the if statement in TCL에 대한 답변은 중괄호와 괄호의 차이점을 명확하게 설명하고 있지만 공백으로 인해 두 번째 블록이 실패하는 이유를 알 수 없습니다.

답변

3

중괄호는 여러 단어를 한 단어로 그룹화하는 인용 메커니즘입니다. 조심스럽게 12 syntax rules

참고 if 명령의 구문을 참조하십시오

if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN? 

expr1는 한 단어이어야합니다.

{ $foo == $bar } 인해

($flowcontrol == 1) 더 괄호 나 큰 따옴표가없는 괄호에 하나의 단어이므로 3 개 별개의 단어로 구문 분석됩니다. 첫 번째 단어의 변수가 확장 된 후 단어는 if으로 expr1으로 지정되고 (1은 유효한 표현식이 아닙니다.

($flowcontrol==1) 공백없이 단어 한 단어입니다. 변수가 확장 된 후 (1==1) - 유효한 표현식 -은 if으로 지정됩니다.

+0

매우 명확한 설명에 감사드립니다. – bagelfire