关于:: http :: geturl令牌用法

时间:2019-06-25 12:56:49

标签: http tcl

我正在为自己的工作学习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 之类的东西,因此我无法自行进行测试以找到答案。
这就是为什么我需要您的帮助。

感谢任何会回答我的人。

1 个答案:

答案 0 :(得分:0)

token实际上包含一个字符串,类似于::http::1(数字越大,您对::http::geturl的调用越多),并且该字符串是数组的名称。

因此,当您执行$token(body)时,您将告诉代码在数组body中查找键token的值,但该数组不存在。如前所述,该数组的实际名称为::http::1。因此,创建别名比使用诸如lindex [array get $token body] 1之类的别名更容易。