2012-01-14 5 views
2

У меня есть следующий базовый код:Переменная Scope в Tcl

proc test {} { 
    set my_var2 3 
    foreach iter {1 2 3} { 
     set my_var1 4 
     set my_var2 5 
     puts "Inside: $my_var1 $my_var2\n" 
    } 
    puts "outside $my_var1, $my_var2\n" ;#WHY IT DOES NOT GIVE ERROR HERE! 
} 
test ;#calling the function 

Выход программы заключается в следующем:

Inside: 4 5 

Inside: 4 5 

Inside: 4 5 

outside 4, 5 

Теперь моя путаница, поскольку my_var1 будет определить только в локальном объеме foreach loop, почему его значение доступно даже вне цикла? Другими словами, что определяет область действия переменной в Tcl? Большое спасибо за помощь!

+0

фигурные скобки больше похожи на кавычки в TCL, они не имеют ничего общего с областью видимости. –

ответ

13

От the Tcl Manual:

Tcl оценивает переменные в пределах области, очерченной проками, пространств имен [...], а на самом верхнем уровне, в глобальном масштабе.

Таким образом, цикл foreach не создает новую область видимости, и все ваши переменные охвачены обработкой proc.

+0

Ох ... получилось это благодаря Эргвуну! – Richeek

+0

Не зная, что может ввести много ошибок (только исправлено) –