oo::util
ИМЯ
oo::util — вспомогательные команды для TclOO
Содержание
КРАТКОЕ ОПИСАНИЕ
package require Tcl 8.5 9
package require TclOO
package require oo::util ?1.2.3?
mymethod method ?arg...?
classmethod name arguments body
classvariable ?arg...?
link method...
link {alias method}...
ooutil::singleton ?arg...?
ОПИСАНИЕ
Этот пакет предоставляет удобную команду для простого задания методов экземпляра в качестве команд обратного вызова, например, для таймеров, файловых событий, привязок Tk и т. д.
КОМАНДЫ
-
mymethod method ?arg...?
Эта команда доступна внутри методов экземпляра. Она принимает имя метода и, возможно, аргументы для метода и возвращает префикс команды, который при выполнении вызывает указанный метод объекта, в котором мы находимся, с переданными аргументами и любыми другими аргументами, указанными при фактическом вызове.
Примечание: эта команда эквивалентна команде из OO-пакета snit с тем же назначением и названа по ее образцу.
-
classmethod name arguments body
Эта команда доступна внутри определений классов. Она принимает имя метода и, возможно, аргументы метода, а затем создает метод класса, доступный пользователям класса и производных классов.
Примечание: эта команда эквивалентна команде typemethod, предоставляемой OO-пакетом snit с той же целью.
Пример
oo::class create ActiveRecord { classmethod find args { puts "[self] called with arguments: $args" } } oo::class create Table { superclass ActiveRecord } puts [Table find foo bar] # ====== # which will write # ====== # ::Table called with arguments: foo bar -
classvariable ?arg...?
Эта команда доступна внутри методов экземпляра. Она принимает ряд имен переменных и делает их доступными в области видимости метода. Исходной областью видимости этих переменных является класс (экземпляр), к которому принадлежит экземпляр объекта. Иными словами, указанные переменные являются общими для всех экземпляров класса.
Примечание: эта команда примерно эквивалентна команде typevariable, предоставляемой OO-пакетом snit с той же целью. Разница в том, что ее нельзя использовать непосредственно в определении класса.
Пример:
% oo::class create Foo { method bar {z} { classvariable x y return [incr x $z],[incr y] } } ::Foo % Foo create a ::a % Foo create b ::b % a bar 2 2,1 % a bar 3 5,2 % b bar 7 12,3 % b bar -1 11,4 % a bar 0 11,5 link method...
-
link {alias method}...
Эта команда доступна внутри методов экземпляра. Она принимает список имен методов и/или пар псевдоним—имя метода и делает указанные методы доступными во всех методах экземпляра без необходимости использовать команду my.
По умолчанию псевдоним, под которым становится доступен метод, совпадает с именем метода, если только он явно не указан в паре псевдоним/имя метода.
Примеры:
link foo # The method foo is now directly accessible as foo instead of my foo. link {bar foo} # The method foo is now directly accessible as bar. link a b c # The methods a, b, and c all become directly acessible under their # own names.Предполагается, что эта команда будет использоваться главным образом в конструкторах экземпляров для удобства или для настройки методов, используемых в мини-языке предметной области.
-
ooutil::singleton ?arg...?
Эта команда является метаклассом, то есть разновидностью встроенного класса oo::class, которая гарантирует создание только одного экземпляра определенных с ее помощью классов.
Синтаксис и результаты такие же, как у oo::class.
Пример:
% oo::class create example { self mixin singleton method foo {} {self} } ::example % [example new] foo ::oo::Obj22 % [example new] foo ::oo::Obj22
АВТОРЫ
Donal Fellows, Andreas Kupries
Ошибки, идеи, отзывы
В этом документе и описываемом в нем пакете, несомненно, есть ошибки и другие проблемы. Пожалуйста, сообщайте о них в категории oo::util в системе отслеживания ошибок Tcllib. Также сообщайте о любых идеях по улучшению пакета и/или документации.
Предлагая изменения кода, пожалуйста, предоставляйте унифицированные различия, то есть вывод команды diff -u.
Обратите также внимание, что вложения предпочтительнее встроенных патчей. Файлы можно прикрепить, открыв форму Редактировать для заявки сразу после ее создания и нажав крайнюю левую кнопку на дополнительной панели навигации.
СМ. ТАКЖЕ
КАТЕГОРИЯ
Утилиты
АВТОРСКИЕ ПРАВА
Авторские права © 2011–2015 Andreas Kupries, лицензия BSD