proc
Имя
proc — Создать процедуру TclСинтаксис
proc name args bodyОписание
Команда proc создаёт новую процедуру Tcl с именем name, заменяя любую существующую команду или процедуру с таким же именем. При каждом вызове новой команды интерпретатор Tcl выполнит содержимое body. Обычно name является неопределённым (не включает имена каких-либо содержащих его пространств имён), и новая процедура создаётся в текущем пространстве имён. Если name включает какие-либо квалификаторы пространства имён, процедура создаётся в указанном пространстве имён. Args определяет формальные аргументы процедуры. Это список, возможно пустой, каждый элемент которого определяет один аргумент. Каждый спецификатор аргумента также является списком с одним или двумя полями. Если в спецификаторе только одно поле, то это имя аргумента; если два поля, то первое — имя аргумента, а второе — его значение по умолчанию. Аргументы со значениями по умолчанию, за которыми следуют не имеющие значения по умолчанию аргументы, становятся обязательными аргументами; должно быть предоставлено достаточно фактических аргументов, чтобы разрешить все аргументы вплоть до последнего обязательного формального аргумента.При вызове name для каждого из формальных аргументов процедуры будет создана локальная переменная; её значением будет значение соответствующего аргумента в вызывающей команде или значение по умолчанию аргумента. Фактические аргументы назначаются формальным аргументам строго в порядке. Аргументы со значениями по умолчанию не обязательно должны быть указаны в вызове процедуры. Однако должно быть достаточно фактических аргументов для всех формальных аргументов, которые не имеют значений по умолчанию, и не должно быть никаких дополнительных фактических аргументов. Аргументы со значениями по умолчанию, за которыми следуют не имеющие значений по умолчанию аргументы, фактически становятся обязательными аргументами, хотя это может измениться в будущих версиях Tcl; переносимый код должен гарантировать, что все необязательные аргументы следуют за всеми обязательными аргументами.
Существует один особый случай, позволяющий процедурам иметь переменное количество аргументов. Если последний формальный аргумент имеет имя «args», то вызов процедуры может содержать больше фактических аргументов, чем у процедуры формальных аргументов. В этом случае все фактические аргументы, начиная с того, который был бы назначен args, объединяются в список (как если бы была использована команда list); это объединённое значение присваивается локальной переменной args.
При выполнении body имена переменных обычно относятся к локальным переменным, которые создаются автоматически при обращении и удаляются при возвращении из процедуры. Для каждого аргумента процедуры автоматически создаётся одна локальная переменная. Другие переменные могут быть доступны только при вызове одной из команд global, variable, upvar или namespace upvar. Текущее пространство имён при выполнении body будет тем пространством имён, в котором существует имя процедуры, которое будет тем пространством имён, в котором оно было создано, если только оно не было изменено с помощью rename.
Команда proc возвращает пустую строку. При вызове процедуры значением процедуры является значение, указанное в команде return. Если процедура не выполняет явную команду return, то её возвращаемое значение — значение последней выполненной команды в теле процедуры. Если при выполнении тела процедуры произошла ошибка, вся процедура вернёт эту ошибку.
Примеры
Эта процедура принимает два аргумента и печатает сумму и произведение этих аргументов. Она также возвращает строку «OK» вызывающей стороне в качестве явного результата.proc printSumProduct {x y} {
set sum [expr {$x + $y}]
set prod [expr {$x * $y}]
puts "sum is $sum, product is $prod"
return "OK"
} Это процедура, которая принимает произвольное количество аргументов и печатает их по одному.
proc printArguments args {
foreach arg $args {
puts $arg
}
} Эта процедура немного похожа на команду incr, за исключением того, что она умножает содержимое указанной переменной на заданное значение, которое по умолчанию равно 2:
proc mult {varName {multiplier 2}} {
upvar 1 $varName var
set var [expr {$var * $multiplier}]
} См. также
info, unknown
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/proc.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/proc.htm