Spec-Zone.ru › Tcl/Tk

self

Имя
self — внутреннее отражение вызова метода
Синтаксис
Описание
self call
self caller
self class
self filter
self method
self namespace
self next
self object
self target
Примеры
См. также
Ключевые слова

Имя

self — внутреннее отражение вызова метода

Синтаксис

package require TclOO

self ?subcommand?

Описание

Команда self, которую следует использовать только в контексте вызова метода (т.е. внутри метода, конструктора или деструктора), используется для получения информации о том, как был вызван метод. Она принимает аргумент subcommand, указывающий, какой вид информации требуется; если аргумент опущен, результат будет таким же, как при вызове self object. Поддерживаемые подкоманды:
self call
Возвращает список из двух элементов, описывающий реализацию методов, используемых в текущей цепочке вызовов. Первый элемент такой же, как сообщалось бы командой info object call для текущего метода (кроме того, что она также сообщает полезные значения из конструкторов и деструкторов, имена которых сообщаются как <constructor> и <destructor> соответственно), а второй элемент — индекс в списке первого элемента, указывающий, какая реализация выполняется в настоящее время (первая реализация, выполняющаяся, всегда имеет индекс 0).
self caller
Когда метод был вызван изнутри метода другого объекта, эта подкоманда возвращает список из трех элементов, описывающий содержащий объект и метод. Первый элемент описывает объявляющий объект или класс метода, второй элемент — имя объекта, на котором был вызван содержащий метод, а третий элемент — имя метода (строки <constructor> и <destructor> указывают на конструкторы и деструкторы соответственно).
self class
Возвращает имя класса, в котором был определен текущий метод. Обратите внимание, что это значение изменяется при прохождении цепочки реализаций методов с помощью команды next, и если метод был определен на объекте, то это приведет к ошибке.

Если вам нужен класс текущего объекта, вам нужно использовать другую конструкцию:

info object class [self object]
self filter
При вызове внутри фильтра эта подкоманда возвращает список из трех элементов, описывающий фильтр. Первый элемент указывает имя объекта или класса, который объявил фильтр (обратите внимание, что это может отличаться от объекта или класса, предоставившего реализацию фильтра), второй элемент — object или class в зависимости от того, был ли объявляющим элементом объект или класс, а третий элемент — имя фильтра.
self method
Возвращает имя текущего метода (строки <constructor> и <destructor> обозначают конструкторы и деструкторы соответственно).
self namespace
Возвращает имя уникального пространства имен объекта, на котором был вызван метод.
self next
При вызове из метода, который не находится в конце цепочки вызовов (т.е. где команда next вызывает фактическую реализацию метода), эта подкоманда возвращает список из двух элементов, описывающий следующий элемент в цепочке вызовов метода; первый элемент — имя класса или объекта, который объявляет следующую часть цепочки вызовов, а второй элемент — имя метода (строки <constructor> и <destructor> указывают на конструкторы и деструкторы соответственно). Если вызывается из метода, который находится в конце цепочки вызовов, эта подкоманда возвращает пустую строку.
self object
Возвращает имя объекта, на котором был вызван метод.
self target
При вызове внутри реализации фильтра эта подкоманда возвращает список из двух элементов, описывающих фильтруемый метод. Первый элемент будет именем объявляющего метод, а второй — фактическим именем метода.

Примеры

Этот пример демонстрирует базовое использование self для получения информации о текущем объекте:
oo::class create c {
    method foo {} {
        puts "this is the [self] object"
    }
}
c create a
c create b
a foo                → prints "this is the ::a object"
b foo                → prints "this is the ::b object"

Это демонстрирует, как выглядит цепочка вызовов метода и как изменяется индекс при ее прохождении:

oo::class create c {
    method x {} {
        puts "Cls: [self call]"
    }
}
c create a
oo::objdefine a {
    method x {} {
        puts "Obj: [self call]"
        next
        puts "Obj: [self call]"
    }
}
a x     → Obj: {{method x object method} {method x ::c method}} 0
        → Cls: {{method x object method} {method x ::c method}} 1
        → Obj: {{method x object method} {method x ::c method}} 0

См. также

info, next

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

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

Spec-Zone.ru

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