Next: , Up: methods   [Contents][Index]


7.1 Concrete methods

We can think of method as acting like define/checked with regard to the syntax of arguments to function; the first argument to a method is the record itself, but it is implicit: we can access it using the fluid syntax this. For example, using the procedural coding style:

(define-record-type <duo>
  (strip-angular-parentheses)
  (fields one two)
  (method (sum-them)
    (+ (duo-one this)
       (duo-two this)))
  (method (mul-them)
    (* (duo-one this)
       (duo-two this))))

(define O
  (make-duo 1 2))

(method-call sum-them O)        ⇒ 3

and using the object–oriented syntax style:

(define-record-type <duo>
  (fields one two)
  (method (sum-them)
    (+ (.one this)
       (.two this)))
  (method (mul-them)
    (* (.one this)
       (.two this))))

(define O
  (new <duo> 1 2))

(.sum-them O)   ⇒ 3

The syntax method-call searches for a record–type’s methods by using eq? to search for the method’s name, as symbol, in the record–type’s internal table of methods (it does not use the syntactic identifiers with free-identifier=?). Calling object–type methods.