configbody
Имя
itcl::configbody — изменение кода «config» для публичной переменнойСинтаксис
itcl::configbody className::varName bodyОписание
Команда configbody используется вне определения класса [incr Tcl] для определения или переопределения кода конфигурации, связанного с публичной переменной. Публичные переменные действуют как параметры конфигурации для объекта. Их можно изменить вне области видимости класса, используя встроенный метод configure. Каждая переменная может иметь небольшой фрагмент кода «config», который автоматически выполняется при конфигурации переменной. Команда configbody может использоваться для определения или переопределения этого кода.Подобно команде body, этот механизм позволяет разделять части определения класса на «интерфейс» и «реализацию». Часть «интерфейс» — это команда class с объявлениями методов, процедур, переменных экземпляра и общих переменных. Часть «реализация» — это набор команд body и configbody. Если часть «реализация» сохраняется в отдельном файле, ее можно многократно подключать по мере исправления ошибок, что поддерживает интерактивное развитие. При использовании режима «tcl» в редакторе emacs части «интерфейс» и «реализация» можно сохранять в одном файле; при исправлении ошибок отдельные блоки кода можно выделять и отправлять в приложение для тестирования.
Имя «className::varName» идентифицирует публичную переменную, которая обновляется. Если строка body начинается с «@», она обрабатывается как символьное имя C-процедуры. В противном случае она обрабатывается как сценарий команды Tcl.
Символьные имена C-процедур устанавливаются путем регистрации процедур с помощью Itcl_RegisterC(). Это обычно делается в процедуре Tcl_AppInit(), которая автоматически вызывается при запуске интерпретатора. В следующем примере процедура My_FooCmd() регистрируется под символичным именем «foo». Эта процедура может ссылаться в команде configbody как «@foo».
int
Tcl_AppInit(interp)
Tcl_Interp *interp; /* Interpreter for application. */
{
if (Itcl_Init(interp) == TCL_ERROR) {
return TCL_ERROR;
}
if (Itcl_RegisterC(interp, "foo", My_FooCmd) != TCL_OK) {
return TCL_ERROR;
}
} Пример
В следующем примере определяется класс «File» для представления открытых файлов. Всякий раз, когда конфигурируется параметр «-name», существующий файл закрывается, и открывается новый файл. Обратите внимание, что код «config» для публичной переменной необязателен. Например, параметр «-access» его не имеет.itcl::class File {
private variable fid ""
public variable name ""
public variable access "r"
constructor {args} {
eval configure $args
}
destructor {
if {$fid != ""} {
close $fid
}
}
method get {}
method put {line}
method eof {}
}
itcl::body File::get {} {
return [gets $fid]
}
itcl::body File::put {line} {
puts $fid $line
}
itcl::body File::eof {} {
return [::eof $fid]
}
itcl::configbody File::name {
if {$fid != ""} {
close $fid
}
set fid [open $name $access]
}
#
# See the File class in action:
#
File x
x configure -name /etc/passwd
while {![x eof]} {
puts "=> [x get]"
}
itcl::delete object x
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/configbody.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/configbody.htm