据我所知,在tcl中如果要将命名数组传递给函数,则必须通过upvar被调用者体内的命令访问调用者的较高范围.这是在tcl中传递数组的唯一方法吗?
正如Michael指出的那样,有几种方法,还有一个讨论它的维基页面.只是在这里有一些信息,一些选项是:
由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
Run Code Online (Sandbox Code Playgroud)
通过数组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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9916 次 |
| 最近记录: |