self
-
Имя
- self — внутреннее отражение вызова метода
- Синтаксис
- Описание
-
self call
- self caller
- self class
- self filter
- self method
- self namespace
- self next
- self object
- self target
- self caller
Имя
self — внутреннее отражение вызова методаСинтаксис
package require TclOOself ?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