Вы можете использовать global
для доступа к массиву.Например,
array set myArr {a 1 b 2 c 3}
proc foo {} {
global myArr
parray myArr
}
foo
#=> myArr(a) = 1
#=> myArr(b) = 2
#=> myArr(c) = 3
Использование доступа к глобальному namespace
с использованием ::
:
proc bar {} {
parray ::myArr
}
#=> ::myArr(a) = 1
#=> ::myArr(b) = 2
#=> ::myArr(c) = 3
Вы также можете использовать upvar
и uplevel
, они могут или не могут быть легче для понимания в зависимости от вашего опыта работы с Tcl;они требуют от вас понимания уровней (или стековых фреймов).По сути, глобальное пространство имен находится на уровне 0 или # 0, и каждый раз, когда вы входите в proc
, вы переходите на 1 уровень глубже.