self(n) TclOO Commands self(n)______________________________________________________________________________NAMEself - method call internal introspection
SYNOPSIS
package require TclOO
self ?subcommand?
_________________________________________________________________DESCRIPTION
The self command, which should only be used from within the context of
a call to a method (i.e. inside a method, constructor or destructor
body) is used to allow the method to discover information about how it
was called. It takes an argument, subcommand, that tells it what sort
of information is actually desired; if omitted the result will be the
same as if self object was invoked. The supported subcommands are:
self call
This returns a two-element list describing the method implemen‐
tations used to implement the current call chain. The first ele‐
ment is the same as would be reported by info object call for
the current method (except that this also reports useful values
from within constructors and destructors, whose names are
reported as <constructor> and <destructor> respectively), and
the second element is an index into the first element's list
that indicates which actual implementation is currently execut‐
ing (the first implementation to execute is always at index 0).
self caller
When the method was invoked from inside another object method,
this subcommand returns a three element list describing the con‐
taining object and method. The first element describes the
declaring object or class of the method, the second element is
the name of the object on which the containing method was
invoked, and the third element is the name of the method (with
the strings <constructor> and <destructor> indicating construc‐
tors and destructors respectively).
self class
This returns the name of the class that the current method was
defined within. Note that this will change as the chain of
method implementations is traversed with next, and that if the
method was defined on an object then this will fail.
If you want the class of the current object, you need to use
this other construct:
info object class [self object]
self filter
When invoked inside a filter, this subcommand returns a three
element list describing the filter. The first element gives the
name of the object or class that declared the filter (note that
this may be different from the object or class that provided the
implementation of the filter), the second element is either
object or class depending on whether the declaring entity was an
object or class, and the third element is the name of the fil‐
ter.
self method
This returns the name of the current method (with the strings
<constructor> and <destructor> indicating constructors and
destructors respectively).
self namespace
This returns the name of the unique namespace of the object that
the method was invoked upon.
self next
When invoked from a method that is not at the end of a call
chain (i.e. where the next command will invoke an actual method
implementation), this subcommand returns a two element list
describing the next element in the method call chain; the first
element is the name of the class or object that declares the
next part of the call chain, and the second element is the name
of the method (with the strings <constructor> and <destructor>
indicating constructors and destructors respectively). If
invoked from a method that is at the end of a call chain, this
subcommand returns the empty string.
self object
This returns the name of the object that the method was invoked
upon.
self target
When invoked inside a filter implementation, this subcommand
returns a two element list describing the method being filtered.
The first element will be the name of the declarer of the
method, and the second element will be the actual name of the
method.
EXAMPLES
This example shows basic use of self to provide information about the
current object:
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"
This demonstrates what a method call chain looks like, and how travers‐
ing along it changes the index into it:
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
SEE ALSOinfo(n), next(n)KEYWORDS
call, introspection, object
TclOO 0.1 self(n)