[racket] Confused by augment and inner
The way I read it was the new function gets called instead of inner;
#lang racket
(define a%
(class object%
(super-new)
(define/pubment (hello)
(printf "Hello ")
(inner 0)
(printf "!~n "))))
(define b%
(class a%
(super-new)
(define/augment (hello greg)
;Call super here?
(printf " ~a ~n" greg))))
(send (new b%) hello "Bob")
-> Hello Bob!
Is this right?
Cheers,
Stephen
On Monday, September 24, 2012, Gregory Woodhouse wrote:
> 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.
>
--
--
Stephen De Gabrielle
stephen.degabrielle at acm.org
Telephone +44 (0)20 85670911
Mobile +44 (0)79 85189045
http://www.degabrielle.name/stephen
----
Professor: Oh God! I clicked without reading!
Cubert: And I slightly modified something I own!
Professor: We're monsters!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120924/6908c6ba/attachment.html>