#lang racket (require [only-in plait test test/exn error print-only-errors]) (define (msg obj selector . args) (apply (obj selector) args)) (define o-self! (let ([self 'dummy]) (begin (set! self (lambda (m) (case m [(first) (lambda (x) (msg self 'second (+ x 1)))] [(second) (lambda (x) (+ x 1))]))) self))) (test (msg o-self! 'first 5) 7)