itcldelegate
-
НАЗВАНИЕ
- itcl::delegation — делегирование методов, процедур или опций другим объектам
- ПРЕДУПРЕЖДЕНИЕ!
- СИНТАКСИС
- ОПИСАНИЕ
-
делегировать метод methodName к componentName ?как targetName?
- делегировать метод methodName ?к componentName? используя pattern
-
%%
- %c
- %j
- %m
- %M
- %n
- %s
- %t
- %w
- %c
- делегировать метод methodName ?к componentName? используя pattern
- делегировать метод * ?к componentName? ?используя pattern? ?исключая methodName methodName ...?
- делегировать опцию namespec к comp
- делегировать опцию namespec к comp как target
- делегировать опцию * к comp
- делегировать опцию * к comp исключая exceptions
- делегировать option * ?исключая optionName optionName ...?
Имя
itcl::delegation — делегирование методов, процедур или опций другим объектамНекоторые части этого описания позаимствованы из расширения Tcl [snit], так как функциональность в основном идентична.
Предупреждение!
Это новая функциональность в [incr Tcl], где API может еще меняться!!Синтаксис
делегировать метод methodName к componentName ?как targetName?делегировать метод methodName ?к componentName? используя pattern
делегировать метод * ?к componentName? ?используя pattern? ?исключая methodName methodName ...?
делегировать процедуру procName к componentName ?как targetName?
делегировать процедуру procName ?к componentName? используя pattern
делегировать процедуру * ?к componentName? ?используя pattern? ?исключая procName procName ...?
делегировать опцию optionSpec к componentName
делегировать опцию optionSpec к componentName как targetname?
делегировать опцию * к componentName
делегировать опцию * к componentName исключая optionName optionname ...
Описание
Команда delegate используется внутри определения расширенного класса/виджета/адаптера виджета [incr Tcl] для делегирования методов/процедур/опций другим объектам для обработки.- делегировать метод methodName к componentName ?как targetName?
- Эта форма делегирует метод methodName компоненту componentName. То есть, когда метод methodName вызывается на экземпляре этого типа, метод и его аргументы будут переданы команде указанного компонента вместо него. То есть, следующее утверждение
delegate method wag to tail
приблизительно эквивалентно этому явно определенному методу:
method wag {args} { uplevel $tail wag $args }Необязательная часть как позволяет указать имя делегируемого метода и, возможно, добавить некоторые аргументы:
delegate method wagtail to tail as "wag briskly"
Метод не может быть одновременно определен локально и делегирован.
- делегировать метод methodName ?к componentName? используя pattern
- В этой форме оператора используя используется для указания точной формы команды, к которой делегируется метод name. Часть к необязательна, так как выбранная команда может не относиться к какому-либо конкретному компоненту.
Значение части используя — список, который может содержать любые или все следующие коды подстановки; эти коды подставляются со значениями, описанными ниже, для построения префикса делегированной команды. Обратите внимание, что следующие два утверждения эквивалентны:
delegate method wag to tail delegate method wag to tail using "%c %m"
Каждый элемент списка становится отдельным элементом делегированной команды — он никогда не перевычисляется как строка.
Подстановки:
- %%
- Заменяется на один символ "%". Таким образом, чтобы передать строку "%c" в команду как аргумент, вы напишете "%%c".
- %c
- Заменяется командой указанного компонента.
- %j
- Заменяется именем метода; если имя состоит из нескольких токенов, они соединяются подчёркиваниями ("_").
- %m
- Заменяется последним токеном имени метода; если у имени метода один токен, это идентично %M.
- %M
- Заменяется именем метода; если имя состоит из нескольких токенов, они соединяются пробелами.
- %n
- Заменяется именем приватного пространства имен экземпляра.
- %s
- Заменяется именем команды экземпляра.
- %t
- Заменяется полным квалифицированным именем типа.
- %w
- Заменяется исходным именем команды экземпляра; для виджетов и адаптеров виджетов Itcl — это имя окна Tk. Оно остается неизменным, даже если команда экземпляра переименована.
- делегировать метод * ?к componentName? ?используя pattern? ?исключая methodName methodName ...?
- В этой форме все неизвестные имена методов делегируются указанному компоненту. Часть исключая может быть использована для указания списка исключений, т.е. имён методов, которые не будут делегированы. Часть используя определяется как указано выше. В этой форме утверждение должно содержать часть к, часть используя или обе.
Фактически, "*" может быть списком из двух или более токенов, последним из которых является "*", как в следующем примере:
delegate method {tail *} to tailЭто неявно определяет метод хвост, подкоманды которого будут делегированы компоненту хвост.
Определения для делегировать процедуру... такие же, как для метода, единственное различие в том, что это для процедур.
- делегировать опцию namespec к comp
- делегировать опцию namespec к comp как target
- делегировать опцию * к comp
- делегировать опцию * к comp исключая exceptions
- Определяет делегируемую опцию; namespec определяется как для оператора опции. Когда используется метод экземпляра configure, configurelist или cget для установки или получения значения опции, эквивалентная команда configure или cget будет применена к компоненту так, как если бы опция была определена со следующими -configuremethod и -cgetmethod:
method ConfigureMethod {option value} { $comp configure $option $value } method CgetMethod {option} { return [$comp cget $option] }Обратите внимание, что делегированные опции никогда не появляются в массиве itcl_options. Если указана часть как, то используется имя целевой опции вместо имени.
- делегировать option * ?исключая optionName optionName ...?
- Эта форма делегирует все неизвестные опции указанному компоненту. Часть исключая может быть использована для указания списка исключений, т.е. имён опций, которые не будут делегированы.
Предупреждение: опции могут быть делегированы компоненту только если он поддерживает методы экземпляра configure и cget.
Опция не может быть одновременно локально определена и делегирована. TBD: Продолжить отсюда.
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/itcldelegate.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/ItclCmd/itcldelegate.htm