Переменная Область в Tcl - PullRequest
       17

Переменная Область в Tcl

3 голосов
/ 14 января 2012

У меня есть следующий основной код:

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, почему его значение доступно даже вне цикла? Другими словами, что определяет область действия переменной в Tcl? Большое спасибо за помощь!

1 Ответ

15 голосов
/ 14 января 2012

С Руководство Tcl :

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

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

...