Поиск…
Синтаксис
- установить значение 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
}