Об использовании :: http :: geturl токена - PullRequest
1 голос
/ 25 июня 2019

Я изучаю 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 голосов
/ 25 июня 2019

token на самом деле содержит строку, что-то вроде ::http::1 (число увеличивается с увеличением числа обращений к ::http::geturl), и эта строка является именем массива.

Поэтому, когда вы делаете $token(body), вы сообщаете коду найти значение для ключа body в массиве token, за исключением того, что этот массив не существует. Фактическое имя массива ::http::1, как упоминалось ранее. Так что проще создать псевдоним, чем использовать что-то вроде, скажем, lindex [array get $token body] 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...