Go to main content

man pages section 1: User Commands

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

self (1t)

Name

self - method call internal introspection

Synopsis

package require TclOO

self ?subcommand?

Description

self(1t)                        TclOO Commands                        self(1t)



______________________________________________________________________________

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


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+------------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE  |
       +---------------+------------------+
       |Availability   | runtime/tcl-8    |
       +---------------+------------------+
       |Stability      | Uncommitted      |
       +---------------+------------------+

SEE ALSO
       info(n), next(n)

KEYWORDS
       call, introspection, object



NOTES
       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This     software     was    built    from    source    available    at
       https://github.com/oracle/solaris-userland.   The  original   community
       source was downloaded from  http://prdownloads.sourceforge.net/tcl/tcl-
       core8.6.7-src.tar.gz.

       Further information about this software can be found on the open source
       community website at https://www.tcl.tk/.



TclOO                                 0.1                             self(1t)