我正在为自己的工作学习TCL,但有一个问题,我找不到答案。
它与::http::geturl
令牌的使用有关。
让我们考虑以下代码:
package require http
set url "some url"
set token [::http::geturl $url]
# the question is about the line below
upvar #0 $token state
set data $state(body)
如果我没有记错的话,此处使用upvar
只是创建一个别名state
并引用token
。
我想知道为什么总是用我能看到的任何代码(甚至在TCL文档中)编写此行?
更清楚地说,set data $state(body)
等于set data $token(body)
吗?
如果是这样,为什么在不必要的情况下我们为什么要写这个upvar
(不是真正有用,但是会使脚本更重)?
我目前无法在笔记本电脑上安装诸如 tclsh 之类的东西,因此我无法自行进行测试以找到答案。
这就是为什么我需要您的帮助。
感谢任何会回答我的人。
答案 0 :(得分:0)
token
实际上包含一个字符串,类似于::http::1
(数字越大,您对::http::geturl
的调用越多),并且该字符串是数组的名称。
因此,当您执行$token(body)
时,您将告诉代码在数组body
中查找键token
的值,但该数组不存在。如前所述,该数组的实际名称为::http::1
。因此,创建别名比使用诸如lindex [array get $token body] 1
之类的别名更容易。