I am trying to understand how augmentable methods (as described in section 13.5 
of The Guide) work.

Between the extremes of allowing arbitrary overriding and disallowing 
overriding entirely, the class system also supports Beta-style augmentable 
methods [Goldberg04]. A method declared with pubment is like public, but the 
method cannot be overridden in subclasses; it can be augmented only. A pubment 
method must explicitly invoke an augmentation (if any) using inner; a subclass 
augments the method using augment, instead of override.


>From this I conclude that if, for example, I have a class a% and a subclass b% 
>and I want to augment a method of a% in b% I need to call inner in the 
>definition of the method in a%, not b%. Something like this

#lang racket

(define a%
  (class object%
    (super-new)
    (define/pubment (hello)
      (printf "Hello~n")
      (inner 0))))

(define b%
  (class a%
    (super-new)
    (define/augment (hello)
      ;Call super here?
      (printf ", world!~n"))))


but this gives me an error (not really a surprise). My assumption is that super 
should be used in the subclass when overriding a method, but if a method is to 
be augmented any potential code in an augmenting class should be invoked from 
the superclass and super is not used in the subclass. Obviously, I'm missing 
something.
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to