关于 ::http::geturl 令牌的使用

About the ::http::geturl token usage

为了工作学习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等任何东西,所以我无法通过自己的测试找到答案。
这就是我需要你帮助的原因。

感谢任何愿意回答我的人。

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

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

这样的东西更容易