<br><br><div class="gmail_quote">On Wed, Sep 15, 2010 at 15:59, Matthias Felleisen <span dir="ltr">&lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
Where do you want to bind them? In the current namespace? Scope?<br></blockquote><div><br><br>Module scope, in the current namespace, runtime phase.<br>(I think, if I understand all these terms correctly).<br><br>Here is the same code as the previous one, but this time working (still only for a%):<br>

<br>&lt;a.rkt&gt;<br>#lang racket<br><br>(provide a%)<br><br>(define a%<br>  (class object% (super-new)<br>    (init-field val)<br>    <br>    (define/public (get-the-val)<br>      val)<br>    ))<br><br><br>&lt;singleton.rkt&gt;<br>

#lang racket<br><br>(require (for-syntax racket/class)<br>         &quot;a.rkt&quot;<br>         (for-syntax &quot;a.rkt&quot;)<br>         )<br><br>(define-syntax-rule (define-singleton-sender func obj meth)<br>  (begin (printf &quot;define-sender: ~s ~s ~s\n&quot; &#39;func &#39;obj &#39;meth)<br>

         (define (func . args)<br>           (send/apply (obj) meth args))))<br><br>(define-syntax (class-&gt;singleton stx)<br>  (syntax-case stx ()<br>    [(_ cl obj)<br>     (with-syntax ([(name ...)<br>                    (map (λ(n)(datum-&gt;syntax #&#39;cl n))<br>

                         (interface-&gt;method-names (class-&gt;interface a%)))]) ; only for a% ***<br>       #&#39;(begin (define-singleton-sender name obj name)<br>              ...))]))<br><br><br>(define current-a (make-parameter (new a% [val 3])))<br>

<br>(class-&gt;singleton a% current-a)<br><br>(get-the-val)<br><br><br><br>I really only need to pass some class to the class-&gt;singleton macro.<br>There must be some simple answer ; I&#39;d be very surprised if this was not possible.<br>

<br>Thanks a lot for the time you take to answer.<br><br><br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div><div></div><div class="h5"><br>
<br>
On Sep 15, 2010, at 9:47 AM, Laurent wrote:<br>
<br>
&gt;<br>
&gt;<br>
&gt; On Wed, Sep 15, 2010 at 15:29, Matthias Felleisen &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; Would this help you:<br>
&gt;<br>
&gt; #lang racket<br>
&gt;<br>
&gt; (define a%<br>
&gt;  (class object%<br>
&gt;    (init-field this.x)<br>
&gt;    (define/public (foo x)<br>
&gt;      (set! this.x x))<br>
&gt;    (define/public (bar)<br>
&gt;      this.x)<br>
&gt;    (super-new)))<br>
&gt;<br>
&gt; (new a% [this.x 10])<br>
&gt;<br>
&gt; (define (generic-methods class%)<br>
&gt;  (map (lambda (name) (list name (make-generic class% name)))<br>
&gt;       (interface-&gt;method-names (class-&gt;interface class%))))<br>
&gt;<br>
&gt; (generic-methods a%)<br>
&gt;<br>
&gt; If I could pass the latter result to a macro that binds the names with the function automatically, yes,<br>
&gt; but this seems to be exactly my initial problem, I think.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Sep 15, 2010, at 9:10 AM, Laurent wrote:<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; On Wed, Sep 15, 2010 at 14:57, Matthias Felleisen &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; Can we start from something simpler?<br>
&gt; &gt;<br>
&gt; &gt; The name of your macro suggests that you want something like this:<br>
&gt; &gt;<br>
&gt; &gt; (define one-and-only-one-instance<br>
&gt; &gt;  (new (class my-super% ...)))<br>
&gt; &gt;<br>
&gt; &gt; This creates a class and creates a single instance. Because class is nested<br>
&gt; &gt; in the call to new, there is no way to get another instance.<br>
&gt; &gt;<br>
&gt; &gt; Would this be what you want?<br>
&gt; &gt;<br>
&gt; &gt; Okay, let me explain what I want to do (the name is not really set in stone yet).<br>
&gt; &gt;<br>
&gt; &gt; There is a class a% defined somewhere, and an instance parameter<br>
&gt; &gt; current-a%-object of class a%.<br>
&gt; &gt; Suppose a% has methods foo and bar.<br>
&gt; &gt;<br>
&gt; &gt; Then I call:<br>
&gt; &gt; (class-&gt;singleton a% current-a%-object)<br>
&gt; &gt;<br>
&gt; &gt; This is supposed to define the forms (foo ....) and (bar ....) so that they act like<br>
&gt; &gt; (send (current-a%-object) foo ....), etc.<br>
&gt; &gt;<br>
&gt; &gt; I want to build these definitions automatically from the methods of the class.<br>
&gt; &gt;<br>
&gt; &gt; Anyway, beside the intended goal, I&#39;d still like to know how solve the macro issue.<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br>