UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture07/ o-self-no2.rkt
#lang racket
(require [only-in plait test test/exn error print-only-errors])

(define (msg/self obj selector . args)
  (apply (obj selector) obj args))

(define o-self-no!
  (lambda (m)
    (case m
      [(first) (lambda (self x) (msg/self self 'second (+ x 1)))]
      [(second) (lambda (self x) (+ x 1))])))
(test (msg/self o-self-no! 'first 5) 7)