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