Oops, just saw the discourse forum. Moved to: https://racket.discourse.group/t/let-over-lambda-and-source-location-information/306
Christine Lemmer-Webber <[email protected]> writes: > Take the following code: > > #+BEGIN_SRC racket > (require racket/match) > > (define-syntax-rule (methods* [(method-name method-args ...) body ...] ... > fallback) > (let ((method-name > (lambda (method-args ...) > body ...)) ...) > (define all-methods (list (cons 'method-name method-name) ...)) > (define method-dispatch > (make-keyword-procedure > (lambda (kw-args kw-vals method . args) > (match (assq method all-methods) > [(cons _name found-method) > found-method > #;(keyword-apply found-method kw-args kw-vals args)] > [#f > (keyword-apply fallback kw-args kw-vals method args)])))) > method-dispatch)) > > (define no-such-method > (make-keyword-procedure > (lambda (kw-vals kw-args method . args) > (error "No such method" method)))) > > (define-syntax-rule (methods method-defns ...) > (methods* method-defns ... no-such-method)) > #+END_SRC > > > This is kind of a kluge, I know. But you get the idea. Let over > lambda, because we're going to be reusing these procedures over and over > again across multiple calls. > > Now let's say I instantiate this like: > > #+BEGIN_SRC racket > (define my-methods > (methods > [(double x) > (* x x)])) > #+END_SRC > >> my-methods > #<procedure:...tor-lib/methods.rkt:130:7> > > That's the line where method-dispatch is defined, *inside the macro*. > But what I really want is for the annotation on the procedure to be > *where my-methods is defined*.... not pointing back inside the macro. > > I have no idea how to do this. Thoughts? -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/87lf16u1oo.fsf%40dustycloud.org.

