Поиск…


Синтаксис

  • установить значение varName ?
  • отменить? -nocomplain ? ? -? ? varName varName varName ?
  • ставит $ varName
  • puts [set varName ]
  • переменная varName
  • глобальное имя varName ? varName varName ?

замечания

  • Параметры, заключенные внутри ? ...? таких как ? varName? представляют необязательные аргументы для команды Tcl.
  • Документация: глобальная , upvar

Присвоение значений переменным

Команда set используется для присвоения значений в Tcl. Когда он вызывается с двумя аргументами следующим образом,

% set tempVar "This is a string."
This is a string.

он помещает второй аргумент («Это строка.») в пространство памяти, на которое ссылается первый аргумент (tempVar). set всегда возвращает содержимое переменной, названной в первом аргументе. В приведенном выше примере set вернет «Это строка». без кавычек.

  • Если значение указано, то содержимое переменной varName устанавливается равным значению .
  • Если varName состоит только из буквенно-цифровых символов и без круглых скобок, это скалярная переменная.
  • Если varName имеет вид varName (index) , он является членом ассоциативного массива.

Обратите внимание, что имя переменной не ограничивается латинским алфавитом, оно может состоять из любой комбинации символов юникода (например, армянского):

% set տուն house
house
% puts ${տուն}
house

Обзорный

set alpha 1

proc myproc {} {
    puts $alpha
}

myproc

Этот код не работает, потому что два альфа находятся в разных областях.

Набор команд set alpha 1 создает переменную в глобальной области (что делает ее глобальной переменной).

Команда puts $alpha выполняется в области, созданной при выполнении команды myproc .

Эти две области различны. Это означает, что когда puts $alpha пытается найти имя alpha , он не найдет такой переменной.

Однако мы можем исправить это:

proc myproc {} {
    global alpha beta
    puts $alpha
}

В этом случае две глобальные переменные, alpha и beta , связаны с переменными псевдонимов (с тем же именем) в области действия процедуры. Чтение из переменных псевдонима возвращает значение в глобальных переменных, и запись в них изменяет значения в глобальных переменных.

В более общем upvar команда upvar создает псевдонимы для переменных из любой из предыдущих областей. Он может использоваться с глобальной областью ( #0 ):

proc myproc {} {
    upvar #0 alpha alpha beta b
    puts $alpha
}

Алиасам можно присвоить то же имя, что и переменная, связанная с ( alpha ) или другим именем ( beta / b ).

Если мы вызываем myproc из глобальной области, этот вариант также работает:

proc myproc {} {
    upvar 1 alpha alpha beta b
    puts $alpha
}

Область номер 1 означает «предыдущая область действия» или «область вызова».

Если вы действительно не знаете, что делаете, #0 , 0 и 1 являются единственными областями, которые имеют смысл использовать с upvar . ( upvar 0 создает локальный псевдоним для локальной переменной, а не строго для операции обзора).

Некоторые другие языки определяют область с помощью фигурных скобок и позволяют коду, запущенному в каждой области, видеть все имена в окружающих областях. В Tcl одна единственная область создается при вызове процедуры и видны только ее собственные имена. Если процедура вызывает другую процедуру, ее область укладывается поверх предыдущей области и так далее. Это означает, что в отличие от языков C-стиля, которые имеют только глобальную область видимости и локальную область (с помощью подкопов), каждая область действия действует как охватывающая (хотя и не сразу видимая) область видимости для любой области, которую она открыла. Когда процедура возвращается, ее область действия уничтожается.

Документация: глобальная , upvar

Печать значения переменной

Чтобы напечатать значение переменной, например,

set tempVar "This is a string."

Аргументу в инструкции puts предшествует знак $ , который сообщает Tcl использовать значение переменной.

% set tempVar "This is a string."
This is a string.
% puts $tempVar
This is a string.

Вызов набора с одним аргументом

set также может быть вызван только одним аргументом. Когда вызывается только одним аргументом, он возвращает содержимое этого аргумента.

% set x 235
235
% set x
235

Удаление переменной / s

Команда unset используется для удаления одной или нескольких переменных.

unset ?-nocomplain? ?--? ?name name name name?
  • Каждое имя - это имя переменной, указанное в любом из способов, приемлемых для команды set .
  • Если имя относится к элементу массива, то этот элемент удаляется, не затрагивая оставшуюся часть массива.
  • Если имя состоит из имени массива без индекса в круглых скобках, то весь массив удаляется.
  • Если -nocomplain задан как первый аргумент, тогда все возможные ошибки подавляются из вывода команды.
  • Опция - указывает конец опций и должна использоваться, если вы хотите удалить переменную с тем же именем, что и любой из параметров.
% set x 235
235
% set x
235
% unset x
% set x
can't read "x": no such variable

Переменные пространства имен

Команда variable гарантирует, что будет создана заданная переменная пространства имен. Пока значение не будет присвоено ему, значение переменной не определено:

namespace eval mynamespace {
    variable alpha
    set alpha 0
}

Доступ к переменной можно получить из-за пределов пространства имен (откуда угодно), добавив к ней имя пространства имен:

set ::mynamespace::alpha

Доступ может быть упрощен в рамках процедуры, снова используя команду variable :

proc ::mynamespace::myproc {} {
    variable alpha
    set alpha
}

Это создает локальный псевдоним для переменной пространства имен.

Для процедуры, определенной в другом пространстве имен, имя переменной должно содержать пространство имен в вызове variable :

proc myproc {} {
    variable ::mynamespace::alpha
    set alpha
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow