Provided by: tcl8.6-doc_8.6.14+dfsg-1build1_all bug

NAME

       self - 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 implementations used to implement the
              current call chain. The first element 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 executing (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  containing  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 constructors 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 filter.

       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 traversing 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 ALSO

       info(3tcl), next(3tcl)

KEYWORDS

       call, introspection, object

TclOO                                                  0.1                                            self(3tcl)