Spec-Zone.ru › Tcl/Tk

class

Имя
oo::class — класс всех классов
Синтаксис
Иерархия классов
Описание
Конструктор
Деструктор
Экспортированные методы
cls create name ?arg ...?
cls new ?arg ...?
Неэкспортированные методы
cls createWithNamespace name nsName ?arg ...?
Примеры
См. также
Ключевые слова

Имя

oo::class — класс всех классов

Синтаксис

package require TclOO

oo::class method ?arg ...?

Иерархия классов

oo::object
→ oo::class

Описание

Классы — это объекты, которые могут создавать другие объекты в соответствии с шаблоном, хранящимся в объекте-фабрике (классе). Экземпляр класса создается путем вызова одного из методов фабрики класса, обычно либо create, если задано явное имя, либо new, если нужно автоматически выбрать произвольное уникальное имя.

Класс oo::class — это класс всех классов; каждый класс является экземпляром этого класса, который, следовательно, является экземпляром самого себя. Этот класс является подклассом oo::object, поэтому каждый класс также является объектом. Дополнительные метаклассы (т. е. классы классов) можно определять при необходимости, создавая подклассы oo::class. Обратите внимание, что объект oo::class скрывает метод new на себе, поэтому новые классы всегда должны создаваться с помощью метода create.

Конструктор

Конструктор класса oo::class принимает необязательный аргумент, который, если он присутствует, передается команде oo::define (вместе с именем создаваемого класса), чтобы предоставить возможность удобной конфигурации класса во время создания.

Деструктор

Класс oo::class не определяет явного деструктора. Однако при уничтожении класса также уничтожаются все его подклассы и экземпляры, а также все объекты, в которые он был смешан.

Экспортированные методы

cls create name ?arg ...?
Это создает новый экземпляр класса cls с именем name (который разрешается в пространстве имен вызывающего контекста, если он не является полностью квалифицированным), передавая аргументы arg ... в конструктор и (если он возвращает успешный результат) возвращает полностью квалифицированное имя созданного объекта (результат конструктора игнорируется). Если конструктор завершается неудачно (т. е. возвращает результат, отличный от OK), то объект уничтожается, а сообщение об ошибке является результатом этого вызова метода.
cls new ?arg ...?
Это создает новый экземпляр класса cls с новым уникальным именем, передавая аргументы arg ... в конструктор и (если он возвращает успешный результат) возвращает полностью квалифицированное имя созданного объекта (результат конструктора игнорируется). Если конструктор завершается неудачно (т. е., возвращает результат, отличный от OK), то объект уничтожается, а сообщение об ошибке является результатом этого вызова метода.

Обратите внимание, что этот метод не экспортируется самим объектом oo::class, поэтому классы не должны создаваться с помощью этого метода.

Неэкспортированные методы

Класс oo::class поддерживает следующие неэкспортированные методы:
cls createWithNamespace name nsName ?arg ...?
Это создает новый экземпляр класса cls с именем name (который разрешается в пространстве имен вызывающего контекста, если он не является полностью квалифицированным), передавая аргументы arg ... в конструктор и (если он возвращает успешный результат) возвращает полностью квалифицированное имя созданного объекта (результат конструктора игнорируется). Имя внутреннего пространства имен экземпляра будет nsName, если это пространство имен уже не существует (в противном случае будет выбрано произвольное имя). Если конструктор завершается неудачно (т. е. возвращает результат, отличный от OK), то объект уничтожается, а сообщение об ошибке является результатом этого вызова метода.

Примеры

В этом примере определена простая иерархия классов и создан новый ее экземпляр. Затем вызывается метод объекта перед уничтожением иерархии и демонстрируется, что уничтожение является транзитивным.
oo::class create fruit {
    method eat {} {
        puts "yummy!"
    }
}
oo::class create banana {
    superclass fruit
    constructor {} {
        my variable peeled
        set peeled 0
    }
    method peel {} {
        my variable peeled
        set peeled 1
        puts "skin now off"
    }
    method edible? {} {
        my variable peeled
        return $peeled
    }
    method eat {} {
        if {![my edible?]} {
            my peel
        }
        next
    }
}
set b [banana new]
$b eat               → prints "skin now off" and "yummy!"
fruit destroy
$b eat               → error "unknown command"

См. также

oo::define, oo::object

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/class.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/class.htm

Spec-Zone.ru

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