Dr./Mr./Ms. Takikawa, thank you for advancing my understanding. I would still like to understand what inherit/inner is and how it works. Can anyone else fill me in on this point?
--Christopher On Jun 14, 2013, at 4:13 PM, Asumu Takikawa <as...@ccs.neu.edu> wrote: > On 2013-06-14 14:39:57 -0600, Christopher wrote: >> So I have been trying to learn the ins and outs of Racket's class >> system. I've a little puzzled when it comes to the "inherit"-forms. >> I've poured over the Racket Reference and fiddled with some >> experimental classes, but I'm still not clear. >> >> My questions specifically are, What is the difference between inherit >> and inherit/super, and how does inherit/inner work? > > Here's an example that hopefully shows the difference: > > #lang racket > > (define point% > (class object% > (inspect #f) ; to make example object easier to understand > (super-new) > (init-field [x 0] [y 0]) > (define/public (move-x dx) > (new this% [x (+ x dx)] [y y])))) > > (define fast-point% > (class point% > (super-new) > (inherit/super move-x) > ;; or you can inherit > ;(inherit move-x) > (define/public (move-fast dx) > ;; only with inherit/super or override > (super move-x (* dx 10)) > ;; with inherit, inherit/super, or override > ;(move-x (* dx 10)) > ))) > > (send (new fast-point% [x 0] [y 2]) move-fast 3) > > Notice that with `inherit/super`, you can use `super` on the method name > that you inherit from the superclass. Normally, you can only call > `super` on a method name that you are overriding. > > On the other hand, with either `inherit` or `inherit/super`, you can > call the superclass method by just using the name. > > I have never found the need to use `inherit/super` or `inherit/inner` in > my programs though. I always use `inherit`. > > (If you wanted to know the rationale of why `inherit/super` exists, I'm > not sure. The commit log says it was added to replace `rename-super` > eventually) > > Cheers, > Asumu ____________________ Racket Users list: http://lists.racket-lang.org/users