Spec-Zone.ru › Tcllib

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.

Обратите также внимание, что вложения предпочтительнее встроенных патчей. Файлы можно прикрепить, открыв форму Редактировать для заявки сразу после ее создания и нажав крайнюю левую кнопку на дополнительной панели навигации.

СМ. ТАКЖЕ

snit(n)

КАТЕГОРИЯ

Утилиты

АВТОРСКИЕ ПРАВА

Авторские права © 2011–2015 Andreas Kupries, лицензия BSD

Licensed under the BSD license
https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/ooutil/ooutil.md

Spec-Zone.ru

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