[racket] Calling Private Methods on non-this Objects?

From: Sean Kanaley (skanaley at gmail.com)
Date: Thu May 30 15:05:39 EDT 2013

In C++ for example, the following is valid:

class A {
private:
    int test(A a) { return n + a.n; }
    int n;
};

The key point is the "a.n" is valid.

I'm trying to create a 3d game in Racket, and in order to avoid recomputing
world transforms all the time, child objects (say a rotatable gun on a
parent tank) take a parameter to their parent which is used to add the
child ("this") to the parent, in order that the parent update a delayed
world transform computation in case of multiple calls to set-trans!,
roughly:

(define obj%
  (class object% (super-new) (init ... [parent #f])
    (define p parent)
    (define cs '())
    (when p (send p add-child! this))
    (define/public (set-trans! new-t)
      ... <includes delayed world-trans calc>
      (for ([c cs])
        (send c set-trans! (send c local-trans))))
    ...
    (define/public/private/etc. (add-child! c) (set! cs (cons c cs)))))

It obviously works with "define/public", but I'm hoping there is a way to
not expose the method everywhere.  It's in essence private, but Racket
seems to not allow access even from within the class (send complains "no
such method").
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130530/919be494/attachment.html>

Posted on the users mailing list.