Special Method Variables

When writing methods, there are several special variables that are set automatically when a method runs. Rexx supports the following variables:

SELF is set when a method is activated. Its value is the object that forms the execution context for the method (that is, the object that received the activating message).You can useSELFto:
  • Send messages to the currently active object. For example, a FIND_CLUES method is running in an object called Mystery_Novel. When FIND_CLUES finds a clue, it sends a READ_LAST_PAGE message to Mystery_Novel:
    self~read_last_page
  • Pass references regarding an object to the methods of other objects. For example, a SING method is running in object Song. The code:
    Singer2~duet(self)
    would give the DUET method access to the same Song.
SUPER is set when a method is activated. Its value is the class object that is the usual starting point for a superclass method lookup for theSELFobject. This is the first immediate superclass of the class that defined the method currently running.The special variableSUPERlets you call a method in the superclass of an object. For example, the following Savings class has INIT methods that the Savings class, Account class, and Object class define.
SELF Variable
::class Account
::method INIT
expose balance
use arg balance
self~init:super /* Forwards to the Object INIT method */
::method TYPE
return "an account"
::method name attribute
::class Savings subclass Account
::method INIT
expose interest_rate
use arg balance, interest_rate
self~init:super(balance) /* Forwards to the Account INIT method */
::method type
return "a savings account"
When the INIT method of the Savings class is called, the variableSUPERis set to the Account class object. For example:
self~init:super(balance)
This instruction sends the INIT message to the Account class rather than recursively invoking the INIT method of the Savings class. When the INIT method of the Account class is called, the variableSUPERis assigned to the Object class as this is the Account class' direct super class:
self~init:super
calls the INIT method of the Object class.