首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组传递给tcl中的函数。只有upvar?

将数组传递给tcl中的函数。只有upvar?
EN

Stack Overflow用户
提问于 2010-08-18 22:41:21
回答 3查看 11.7K关注 0票数 5

据我所知,在tcl中,如果要将命名数组传递给函数,则必须通过被调用者主体中的upvar命令访问调用者的上层作用域。这是在tcl中传递数组的唯一方法吗?

EN

回答 3

Stack Overflow用户

发布于 2010-08-19 21:32:31

正如Michael指出的,有几种方法,外加一个讨论它的wiki页面。仅在这里提供一些信息,以下是一些选项:

由Upvar编写的

代码语言:javascript
复制
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

  • 会导致调用方

看到的数组发生更改

按数组获取/设置

代码语言:javascript
复制
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

caller

  • similar机制可用于返回数组的
票数 9
EN

Stack Overflow用户

发布于 2010-08-18 22:43:10

还有other ways,比如先把它转换成列表(通过array getarray set)。

票数 5
EN

Stack Overflow用户

发布于 2010-08-20 04:29:31

如果只传递数组的值,则可以传入字典(提示:array get将数组序列化为字典值),并使用dict命令访问其中的值。但是,如果您想要访问活动值,upvar绝对是最简单的。这也是一种非常快速的技术;在upvar本身完成后,它会在变量访问期间编译成额外的指针遍历。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3513266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档