(wat-aro)

無職から有職者にランクアップしました

プログラミングGauche 17.5.3練習問題

  • <logger-generic>のログ出力のon/offを切り替えられるようにする.
    <logger-generic>クラスにprintingスロットを追加してその真偽で処理を分ければよい. printingスロットの値を後で変えられるようにprinting!メソッドnot-printing!メソッドも追加した.
(define-class <logger-generic> (<generic>)
  ((printing :init-value #t)))

(define-method apply-generic ((gf <logger-generic>) args)
  (if (ref gf 'printing)
      (begin (format #t "args: ~s\n" args)
             (let ((return-value (next-method)))
               (format #t "result: ~s\n" return-value)
               return-value))
      (next-method)))

(define-method not-printing! ((gf <logger-generic>))
  (set! (ref gf 'printing) #f))

(define-method printing! ((gf <logger-generic>))
  (set! (ref gf 'printing) #t))