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 不同,函数默认可以访问全局变量。
这两种方法中的任何一种都适用于 在过程中:
global triAXCord
。这允许您在过程中使用 triAXCord
作为变量名。
- 在变量名前使用
::
前缀,如lappend ::triAXCord $AX
.
如果您需要更灵活的变量名称或范围,您也可以使用 upvar
。
我正在全局声明一个列表。
global triaAXCord
set triAXCord {}
程序 setCordinates 将值附加到此列表。
proc setCordinates {AX} {
lappend triAXCord $AX
puts "$triAXCord"
}
puts 给出了插入的值。 但是当 $triAXCord 打印为空白列表时,来自其他过程。由于列表是全局声明的,为什么值没有更新。
在 proc 定义之外,您的 triAXCord
变量已经在全局范围内。无需明确声明它属于全局范围。
在 proc 中,您处于 proc 的作用域中,无法访问全局作用域的变量,除非您在 proc 中将其显式化。这与 Python 不同,函数默认可以访问全局变量。
这两种方法中的任何一种都适用于 在过程中:
global triAXCord
。这允许您在过程中使用triAXCord
作为变量名。- 在变量名前使用
::
前缀,如lappend ::triAXCord $AX
.
如果您需要更灵活的变量名称或范围,您也可以使用 upvar
。