Spec-Zone.ru › Tcl/Tk

code

Имя

itcl::code — захват контекста пространства имен для фрагмента кода

Синопсис

itcl::code ?-namespace name? command ?arg arg ...?

Описание

Создаёт область видимости для указанного command и его связанных аргументов arg. Область видимости — это список из трёх элементов: ключевое слово "@scope", контекст пространства имён и строка значения. Например, команда
namespace foo {
    code puts "Hello World!"
}
производит область видимости:
@scope ::foo {puts {Hello World!}}
Обратите внимание, что команда code захватывает текущий контекст пространства имён. Если указан флаг -namespace, то текущий контекст игнорируется, и строка name используется как контекст пространства имён.

Расширения, такие как Tk, выполняют обычные фрагменты кода в глобальном пространстве имён. Область видимости захватывает фрагмент кода вместе с его контекстом пространства имён, что позволяет правильно выполнить его позже. Это необходимо, например, для обертывания фрагментов кода, когда виджет Tk используется внутри пространства имён:

namespace foo {
    private proc report {mesg} {
        puts "click: $mesg"
    }

    button .b1 -text "Push Me" 
        -command [code report "Hello World!"]
    pack .b1
}
Фрагмент кода, связанный с кнопкой .b1, имеет смысл только в контексте пространства имён "foo". Кроме того, процедура "report" является приватной и доступна только внутри этого пространства имён. Команда code оборачивает фрагмент кода таким образом, что он может быть правильно выполнен при нажатии кнопки.

Также обратите внимание, что команда code сохраняет целостность аргументов в командной строке. Это делает её естественной заменой для команды list, которая часто используется для форматирования фрагментов кода Tcl. Другими словами, вместо использования команды list так:

after 1000 [list puts "Hello $name!"]
используйте команду code так:
after 1000 [code puts "Hello $name!"]
Это не только правильно форматирует команду, но и захватывает её контекст пространства имён.

Команды области видимости могут быть вызваны как обычные фрагменты кода, с использованием или без команды eval. Например, следующие операторы работают правильно:

set cmd {@scope ::foo .b1}
$cmd configure -background red

set opts {-bg blue -fg white}
eval $cmd configure $opts
Обратите внимание, что команды области видимости пропускают обычные механизмы защиты; команда:
@scope ::foo {report {Hello World!}}
может использоваться для доступа к процедуре "foo::report" из любого контекста пространства имён, даже если она является приватной.

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/code.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/code.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API