scope
Имя
itcl::scope — захват контекста пространства имён для переменнойСинтаксис
itcl::scope имяОписание
Создаёт переменную с областью видимости для указанного имени, которое должно быть именем переменной. Если имя является переменной-членом, то команда scope возвращает имя, которое в любом контексте будет разрешаться как переменная-член объекта объект. Точный формат этого имени является внутренней деталью Itcl. Использование такой переменной с областью видимости позволяет использовать переменные-члены вместе с виджетами. Например, если у вас есть объект с приватной переменной x, и вы можете использовать x в сочетании с опцией -textvariable виджета entry. До itcl3.0, только общие переменные могли быть использованы таким образом.Если имя не является переменной-членом, то оно должно быть общей переменной или глобальной переменной. В этом случае команда scope возвращает полное квалифицированное имя переменной, например, ::foo::bar::x.
Если имя не распознаётся как переменная, команда scope возвращает ошибку.
Обычные имена переменных относятся к переменным в глобальном пространстве имён. Переменная с областью видимости захватывает имя переменной вместе с её контекстом пространства имён таким образом, чтобы её можно было правильно ссылаться на неё позже. Это необходимо, например, для упаковки имён переменных, когда виджет Tk используется в пространстве имён:
namespace foo {
private variable mode 1
radiobutton .rb1 -text "Mode #1"
-variable [scope mode] -value 1
pack .rb1
radiobutton .rb2 -text "Mode #2"
-variable [scope mode] -value 2
pack .rb2
} Радиокнопки .rb1 и .rb2 взаимодействуют через переменную "режим", содержащуюся в пространстве имён "foo". Команда scope гарантирует это, возвращая полностью квалифицированное имя переменной ::foo::режим. Вы никогда не должны использовать синтаксис @itcl напрямую. Например, плохая идея написать код такого вида:
set {@itcl ::fred x} 3
puts "value = ${@itcl ::fred x}" Вместо этого вы всегда должны использовать команду scope для динамического генерирования имени переменной. Затем вы можете передать это имя виджету или любому другому фрагменту кода в вашей программе.
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/scope.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/scope.htm