[plt-scheme] "appending" to classes rather than extending
Thanks, Matthias. Below is my interpretation of your suggestion of
using units to get this effect. The only parts of my solution that I
don't like is how I had to prefix the import in extension-unit%, and
how I had to explicitly define foo for export even though I didn't
want to override it. Surely there's a way to avoid both of those
things...
Thanks,
Rob
(define-signature sig^ (foo bar))
(define-unit base-unit%
(import)
(export sig^)
(define (foo)
"foo base impl")
(define (bar)
"bar base impl"))
(define-unit extension-unit%
(import (prefix base: sig^))
(export sig^)
(define foo base:foo)
(define (bar)
"appended bar impl"))
(define-compound-unit merged-unit%
(import)
(export RESULT)
(link [((BASE : sig^)) base-unit%]
[((RESULT : sig^)) extension-unit% BASE]))
REPL interaction:
> (define-values/invoke-unit merged-unit% (import) (export sig^))
> (foo)
"foo base impl"
> (bar)
"appended bar impl"
On Wed, Mar 5, 2008 at 12:58 PM, Matthias Felleisen
<matthias at ccs.neu.edu> wrote:
>
> You could achieve this kind of effect (via units) but re-definitions
> in a module (and that's what this boils down to) of the same name are
> frowned upon in Scheme. -- Matthias
>
> P.S. Re-definitions at the top-level have been around for a LONG time
> and there is a reason why Schemers are moving away from that approach.
>
>
>
> On Mar 5, 2008, at 3:41 PM, Rob Hunter wrote:
>
> > Hi all,
> >
> > I'm looking to be able to append a few methods to a class. In Ruby, I
> > can do something like this:
> >
> > class Foo
> > def bar
> > ...
> > end
> > ...
> > end
> >
> > class Foo
> > def baz
> > ...
> > end
> > end
> >
> > and both bar and baz will be a part of Foo (these two class defs could
> > be in the same file, or in two different files that are both loaded).
> > Anything like this in the PLT Scheme class system?
> >
> > Thanks,
> > Rob
> > _________________________________________________
> > For list-related administrative tasks:
> > http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>