【发布时间】:2011-03-31 14:34:24
【问题描述】:
据我了解,在 tcl 中,如果要将命名数组传递给函数,则必须通过被调用者正文中的 upvar 命令访问调用者的上层范围。这是在 tcl 中传递数组的唯一方法吗?
【问题讨论】:
标签: tcl
据我了解,在 tcl 中,如果要将命名数组传递给函数,则必须通过被调用者正文中的 upvar 命令访问调用者的上层范围。这是在 tcl 中传递数组的唯一方法吗?
【问题讨论】:
标签: tcl
正如 Michael 所指出的,有几种方法,还有一个讨论它的 wiki 页面。只是为了在这里获得一些信息,一些选项是:
作者: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
按数组获取/设置
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
【讨论】:
upvar 1 $&arrName arr
还有other ways,比如先转换成列表(通过array get和array set)。
【讨论】: