Nyquist / XLISP 2.0  -  Contents | Tutorials | Examples | Reference

:answer


Type:   -   message selector
Source:   -   xlobj.c

Syntax

(send class :answer selector fargs body)
class - an existing class
selector - the message selector symbol
fargs - formal argument list of the same form as a lambda argument list
body - a list containing the method code
returns - the class object

Description

The ':answer' message selector adds or changes a method in the specified class. This method consists of the message selector symbol, the formal argument list and the executable code associated with the message.

Examples

(setq myclass (send class :new '(var)))  ; create MYCLASS with VAR

(send myclass :answer :isnew '()         ; set up initialization
  '((setq var nil) self))

(send myclass :answer :set-it '(value)   ; create :SET-IT message
  '((setq var value)))

(send myclass :answer :mine '()          ; create :MINE message
  '((print "hi there")))

(setq my-obj (send myclass :new))        ; create MY-OBJ of MYCLASS
(send my-obj :set-it 5)                  ; VAR is set to 5
(send my-obj :mine)                      ; prints  "hi there"

Note: When you define a message in a class, the message is only valid for instances of the class or its sub-classes. You will get an error if you try to send the message to the class where it was first defined. If you want to add a message to a class, you need to define it in the super-class of the class.

Message structure: The normal XLISP convention for a message is to have a valid symbol preceeded by a colon like :isnew or ':my-message'. However, it is possible to define a message that is a symbol without a colon, but this pollutes the global namespace and also makes the code less readable.

See also:

  Back to Top


Nyquist / XLISP 2.0  -  Contents | Tutorials | Examples | Reference