TCL 列表中的范围问题

Scope issue in TCL list

我正在全局声明一个列表。

global triaAXCord 
set triAXCord {}

程序 setCordinates 将值附加到此列表。

proc setCordinates {AX} {
lappend triAXCord $AX
puts "$triAXCord"
}

puts 给出了插入的值。 但是当 $triAXCord 打印为空白列表时,来自其他过程。由于列表是全局声明的,为什么值没有更新。

在 proc 定义之外,您的 triAXCord 变量已经在全局范围内。无需明确声明它属于全局范围。

在 proc 中,您处于 proc 的作用域中,无法访问全局作用域的变量,除非您在 proc 中将其显式化。这与 Python 不同,函数默认可以访问全局变量。

这两种方法中的任何一种都适用于 在过程中:

  1. global triAXCord。这允许您在过程中使用 triAXCord 作为变量名。
  2. 在变量名前使用::前缀,如lappend ::triAXCord $AX.

如果您需要更灵活的变量名称或范围,您也可以使用 upvar