Всегда определяйте переменные в пространстве имен с помощью команды variable
, по крайней мере, при первом обращении к ним, в противном случае вы получите правила разрешения переменных пространства имен , которые сделают вашу жизнь неприятной.Они странные (хотя на самом деле очень похожи на то, как работает разрешение команд), и вы практически никогда не захотите их, и могут быть удалены в Tcl 9. Но до тех пор вы застряли:
namespace eval ns {
variable foo 2
variable bar 3
}
или:
namespace eval ns {
variable foo
set foo 2
variable bar
set bar 3
}
Если вы хотите делать массивы, вы можете.Сделайте их так (только с одним аргументом variable
):
namespace eval ns {
variable ary
array set ary {foo 2 bar 3}
}
На самом деле команда variable
делает переменную в пространстве имен в unset
состоянии так что он все еще разрешается, когда такие команды, как set
и array
могут найти переменную и записать в нее.