(module ivar mzscheme (require (lib "class.ss")) (provide ivar) (define-syntax ivar (syntax-rules () [(ivar instance-expr method-name) (let* ((instance instance-expr) (method-name (lambda args (send/apply instance method-name args)))) ;; used the let to get inferred-name of the lambda ;; initialized properly method-name)])) ;; the following is broken (define-syntax ivar-broken (syntax-rules () [(ivar inst-expr name) (let ((inst inst-expr)) (with-method ((x (inst name))) x))])) )