Как указал Майкл, есть несколько способов, а также вики-страница, где это обсуждается.Просто для того, чтобы получить здесь некоторую информацию, есть несколько параметров:
By Upvar
proc by_upvar {&arrName} {
upvar 1 ${&arrName} arr
puts arr(mykey)
set arr(myotherkey) 2
}
set myarr(mykey) 1
by_upvar myarr
info exists myarr(myotherkey) => true
- приводит к изменениям в массиве, видимым вызывающей стороной
По массиву get / set
proc by_getset {agv} {
array set arr $agv
puts arr(mykey)
set arr(myotherkey) 2
return [array get arr]
}
set myarr(mykey) 1
array set mynewarr [by_upvar myarr]
info exists myarr(myotherkey) => false
info exists mynewarr(myotherkey) => true
- приводит к тому, что вызывающий объект видит изменения в массиве
- механизм может быть использован для возврата массива