首页 > 解决方案 > TCL 中的全局数组

问题描述

我想知道如何在TCL中制作或创建一个全局数组,以便在Procedure. 我的意思是,如果我有一个Procedure并且我想获取数组值以在过程中使用它,我该怎么做?

标签: tcl

解决方案


您可以使用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

您也可以使用upvarand uplevel,它们可能更容易理解,也可能不容易理解,具体取决于您使用 Tcl 的经验;它们要求您了解关卡(或堆栈帧)。基本上,全局命名空间处于 0 级或 #0 级,每次进入 aproc时,都会深入 1 级。


推荐阅读